使用类似try_files东西我怎样才能检查多个目录来查看文件是否存在? 如果文件存在redirect到该位置,如果不显示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(/.*)?$到该位置
这可能是最简单的多个if块,但首先阅读 ,因为你应该只使用像rewrite ... last或在一个if块内return语句。
像这样的东西可能适合你:
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块放在其他正则expression式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; }
你可能需要尝试最后的? 在正则expression式中。 你想URI /wp-content/uploads匹配的位置?