1

我正在尝试将一些 htaccess 文件转换为 Nginx vhost 配置,但我遇到了问题:

RewriteCond %{DOCUMENT_ROOT}/img/id_$1_$2 -f
RewriteRule ^id/(.+)/(.+)$ img/id_$1_$2 [NC,L]

如您所见,此条件使用某些正则表达式检查文件是否存在,以通过输入的 URL 动态生成文件名。

以下 nginx 指令正确执行重写,但不检查文件 bofore:

rewrite ^/id/(.+)/(.+)$ /img/id_$1_$2 break;

如果文件确实存在,我只想进行此重写,否则将发生另一次重写。

所有的想法都可能有所帮助。非常感谢。

4

1 回答 1

1
try_files $uri $uri/ @what_to_do;

从那里,定义一个新位置,如下所示:

location @what_to_do {
    rewrite ^/id/(.+)/(.+)$ /img/id_$1_$2 break;
}

try_files指令将尝试在 $uri 然后在 $uri/ 处查找文件,其中 $uri 是 URL 中指定的路径。否则,它将转到重写所在的@what_to_do 位置块。

加分点:这还允许您将重写规则与服务器配置的其余部分巧妙地分开!

于 2013-05-16T20:19:33.603 回答