Answers:
location /images/ {
if (-f $request_filename) {
break;
}
rewrite ^/images/(.*) /new_images/$1 permanent;
}
但是,您可能想调试主机以进行升级或找到更好的主机。
请不要if
在位置限制内使用。坏事可能发生。
location ~* ^/images/(.+)$ {
root /www;
try_files /path/to/$1 /website_images/path_to/$1 /any/dir/$1 @your404;
}
$1
成为可以在try_files指令中尝试的文件名,该指令是针对您要完成的工作而创建的。
否则,只需重写它即可,无需检查。如果该图像不存在,无论如何您将得到404。
try_files
yet”),但对于将来来这里的访客而言,此答案值得更多投票。
您可以使用类似以下内容(针对您的特定情况而未经测试):
location ^/images/(?<imgpath>.*)$ {
set $no_old 0;
set $yes_new 0;
if (!-f $request_filename)
{
set $no_old 1;
}
if (-f ~* "^/new_path/$imgpath")
{
set $yes_new 1$no_old;
}
# replacement exists in the new path
if ($yes_new = 11)
{
rewrite ^/images/(.*)$ /new_path/$1 permanent;
}
# no image in the new path!
if ($yes_new = 01)
{
return 404;
}
}
基本上,这是编写嵌套if
语句的另一种方法,因为您不能在Nginx中嵌套。有关此“ hack”的官方参考,请参见此处。