使用类似“try_files
如何检查多个目录以查看文件是否存在?”的方法。如果文件存在则重定向到该位置,如果不存在则显示 404。
旧文件夹^/wp-content/uploads(/.*)?$
要检查多个文件夹
/sites/default/files$1;
/sites/default/files/testA$1;
/sites/default/files/testB$1;
/sites/default/files/testC$1;
/sites/default/files/testD$1;
例如:如果文件存在/sites/default/files/testB$1;
则重写^/wp-content/uploads(/.*)?$
到该位置
答案1
这可能是用多个块最容易做到的if
,但是先读这个,因为您应该只在块内使用类似rewrite ... last
或 的语句。return
if
类似这样的方法可能对你有用:
location ~ ^/wp-content/uploads(?<name>/.*)?$ {
if (-f $document_root/sites/default/files$name) {
return 301 /sites/default/files$name;
}
if (...) { ... }
if (...) { ... }
if (...) { ... }
if (...) { ... }
return 404;
}
您需要将该location
块放置在其他正则表达式location
块上方,否则可能会与其发生冲突。请参阅这个文件了解详情。
编辑:也许它作为try_files
指令的参数看起来更好。我不知道语句的大小是否有上限try_files
:
location ~ ^/wp-content/uploads(?<name>/.*)?$ {
try_files
/sites/default/files$name
/sites/default/author_images$name
/sites/default/blog_images$name
...
=404;
}
您可能需要尝试?
正则表达式中的最后一个。您想让 URI/wp-content/uploads
与位置匹配吗?