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

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

  • http://www.example.com/en/some/content
  • http://www.example.com/ru/novost

可悲的是,由于我使用的框架的限制,文件也被链接/寻找在前缀地址下:

  • http://www.example.com/files/image.png (这是有效的和预期的)
  • http://www.example.com/en/files/image.png
  • http://www.example.com/ru/files/image.png

我想让我的nginx做的是按以下顺序尝试文件:

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

1.和3.可以用简单的方式完成:

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

我知道〜*命令告诉Nginx做一个正则expression式匹配( 源 )。 可悲的是,我不知道如何制定匹配来省略潜在的组,而不是select它。 并尝试与variables之前和之后让我尝试使用, if – 当然,我想避免这一点。

我相信我错过了一些相对简单的事情。

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

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