如何在 nginx 1.6 中为 try_files 删除 $uri 的语言部分?

如何在 nginx 1.6 中为 try_files 删除 $uri 的语言部分?

我有一个在 $uri 中有语言前缀的网站,例如:

遗憾的是,由于我使用的框架的限制,文件也是在前缀地址下链接/查找的:

我希望我的 nginx 按照以下顺序尝试文件:

  1. $uri照原样
  2. /files/image.png(即使存在 en 或 ru 或任何其他双字母代码)
  3. /index.php如果适用,则生成文件

1. 和 3. 可以通过以下简单方法完成:

location / {
    try_files $uri /index.php;
}

我知道 ~* 命令可以告诉 Nginx 进行正则表达式匹配(来源)。遗憾的是,我不知道如何制定匹配忽略潜在组,而不是选择它。尝试使用 before 和 after 变量让我尝试使用if- 当然我想避免这种情况。

我相信我遗漏了一些相对简单的东西。

答案1

假设语言部分是两个小写的字符串,则可以通过以下方式实现:

location ~ "^(?:/[a-z]{2})?/(.*)$" {
    try_files /$1 /index.php;
}

相关内容