我正在尝试将一些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;
如果文件确实存在,我只想重写,如果没有,则会发生另一次重写。
所有想法都可能有所帮助。非常感谢。
答案 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位置块,在那里重写是。
奖励点:这也允许您巧妙地将重写规则与服务器配置的其余部分分开!