Nginx 检查多个目录,如果文件存在则重定向到该目录

Nginx 检查多个目录,如果文件存在则重定向到该目录

使用类似“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或 的语句。returnif

类似这样的方法可能对你有用:

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与位置匹配吗?

相关内容