如何将 try_files 与 2 个或更多根一起使用

How to use try_files with 2 or more roots

我看了好几遍,发现没有这样的实现,我想知道我正在尝试的东西是否可行。我有 3 个提供静态内容的相对路径:

Path1: /usr/local/www/style1/static/...
Path2: /usr/local/www/style2/static/...
Path3: /usr/local/www/style3/static/...

这 3 个不同的根本身是静态的,但是 /static 上的内容只是半静态的(可能会有点不同,具体取决于所提供的确切文件,并且可能存在于一个路径中而不存在于另一个路径中).例如

/static/css/custom.css
/static/css/form/button.css
/static/css/form/images/buttondisabled.png
/static/images/ui/buttons/add_item.png
/static/images/ui/menu/help.png

以下是我想做的事情。基本上,如果请求“/static”内容,我想检查与 path1 关联的相对路径,如果没有找到,则检查与 path2 关联的相对路径,如果没有找到,则检查与 path3 关联的相对路径。这看起来相当简单,但我还没有找到任何概述如何完成此操作的示例。我可以将 3 个不同的根设置为变量吗:

path1root /usr/local/www/style1;
path2root /usr/local/www/style2;
path3root /usr/local/www/style3;

location /static
{
    try_files path1root/$uri path2root/$uri path3root/$uri (=404);
}

或者可以按如下方式完成,因为它仅用于 /static 内容:

location /static
{
    path1root /usr/local/www/style1;
    path2root /usr/local/www/style2;
    path3root /usr/local/www/style3;

    try_files path1root/$uri path2root/$uri path3root/$uri (=404);
}

或者我正在尝试做的事情甚至可以完成吗??如果我不能用 3 个根来做,是否可以只用 2 个根来完成而不将其中一个定义为整体拱形基根。如果可以做到这一点并远离正则表达式那会更好——但如果需要那就需要了。

您可以使用公共根并尝试 try_files 语句中的三个目录:

location /static {
    root /usr/local/www;
    try_files /style1$uri /style2$uri /style3$uri =404;
}