使用正则表达式检查Nginx上是否存在文件

时间:2013-05-16 20:16:23

标签: regex .htaccess nginx rewrite

我正在尝试将一些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;

如果文件确实存在,我只想重写,如果没有,则会发生另一次重写。

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

1 个答案:

答案 0 :(得分: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位置块,在那里重写是。

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