我有一个在 $uri 中有语言前缀的网站,例如:
遗憾的是,由于我使用的框架的限制,文件也是在前缀地址下链接/查找的:
- http://www.example.com/files/image.png(这是有效的和预期的)
- http://www.example.com/en/files/image.png
- http://www.example.com/ru/files/image.png
我希望我的 nginx 按照以下顺序尝试文件:
$uri
照原样/files/image.png
(即使存在 en 或 ru 或任何其他双字母代码)/index.php
如果适用,则生成文件
1. 和 3. 可以通过以下简单方法完成:
location / {
try_files $uri /index.php;
}
我知道 ~* 命令可以告诉 Nginx 进行正则表达式匹配(来源)。遗憾的是,我不知道如何制定匹配忽略潜在组,而不是选择它。尝试使用 before 和 after 变量让我尝试使用if
- 当然我想避免这种情况。
我相信我遗漏了一些相对简单的东西。
答案1
假设语言部分是两个小写的字符串,则可以通过以下方式实现:
location ~ "^(?:/[a-z]{2})?/(.*)$" {
try_files /$1 /index.php;
}