在两个不同的目录中查找要提供的文件时,如何正确使用 try_files?
How do I correctly use try_files when looking in two different directories for files to serve?
我对 Nginx 很陌生,所以我可能对 try_files 的功能有误解。
对于我的本地开发设置,我有多个安装,每个安装都可以通过它们自己的子域访问。这些安装正在迁移到新的文件夹结构中,但我仍然希望能够同时支持两者。当通过 git 拉取时,新的完整路径如下所示:
/home/tom/git/project/v3/[installation]/public/
旧结构深入1个目录如下:
/home/tom/git/project/v3/[installation]/workspace/public
其中 installation
根据安装名称是可变的,/public 文件夹将是 nginx 工作的根目录。
根由子域确定并通过正则表达式提取,如下所示:
server_name ~^(?<subdomain>[^.]+)\.local\.project\.test;
到目前为止,我已经设法让所有这些都适用于一个文件夹结构,但不能同时适用于两个文件夹结构。这个本地域的 Nginx 配置如下所示。以下是我尝试过但似乎无法正常工作的内容。一旦我将@workspace 命名位置作为 try_files 的回退传递,它始终默认为 404.
index index.html index.htm index.nginx-debian.html index.php;
server_name ~^(?<subdomain>[^.]+)\.local\.project\.test;
root /home/tom/git/project/v3/$subdomain/public/;
location / {
try_files $uri @workspace =404;
}
location @workspace {
root /home/tom/git/project/v3/$subdomain/workspace/public/;
try_files $uri =404;
}
我也试过缩短根并将以下参数传递给 try_files
root /home/tom/git/project/v3/$subdomain;
location / {
try_files /public/$uri /workspace/public/$uri =404;
}
但这仍然默认为 404,将 $uri/
作为第三个参数,它将发出 403 禁止尝试列出根目录索引。
我希望有人可以就如何解决我面临的这个问题提供一些建议或替代方案。如果我需要提供额外的数据,请告诉我,
提前致谢。
指定位置必须是 try_files
语句的最后一个元素。
例如:
location / {
try_files $uri @workspace;
}
location @workspace {
...
}
详情见this document。
$uri
变量包含前导 /
,因此您构造的路径名包含 //
,这可能是它们失败的原因。
例如:
location / {
root /home/tom/git/project/v3/$subdomain;
try_files /public$uri /workspace/public$uri =404;
}
我对 Nginx 很陌生,所以我可能对 try_files 的功能有误解。
对于我的本地开发设置,我有多个安装,每个安装都可以通过它们自己的子域访问。这些安装正在迁移到新的文件夹结构中,但我仍然希望能够同时支持两者。当通过 git 拉取时,新的完整路径如下所示:
/home/tom/git/project/v3/[installation]/public/
旧结构深入1个目录如下:
/home/tom/git/project/v3/[installation]/workspace/public
其中 installation
根据安装名称是可变的,/public 文件夹将是 nginx 工作的根目录。
根由子域确定并通过正则表达式提取,如下所示:
server_name ~^(?<subdomain>[^.]+)\.local\.project\.test;
到目前为止,我已经设法让所有这些都适用于一个文件夹结构,但不能同时适用于两个文件夹结构。这个本地域的 Nginx 配置如下所示。以下是我尝试过但似乎无法正常工作的内容。一旦我将@workspace 命名位置作为 try_files 的回退传递,它始终默认为 404.
index index.html index.htm index.nginx-debian.html index.php;
server_name ~^(?<subdomain>[^.]+)\.local\.project\.test;
root /home/tom/git/project/v3/$subdomain/public/;
location / {
try_files $uri @workspace =404;
}
location @workspace {
root /home/tom/git/project/v3/$subdomain/workspace/public/;
try_files $uri =404;
}
我也试过缩短根并将以下参数传递给 try_files
root /home/tom/git/project/v3/$subdomain;
location / {
try_files /public/$uri /workspace/public/$uri =404;
}
但这仍然默认为 404,将 $uri/
作为第三个参数,它将发出 403 禁止尝试列出根目录索引。
我希望有人可以就如何解决我面临的这个问题提供一些建议或替代方案。如果我需要提供额外的数据,请告诉我,
提前致谢。
指定位置必须是 try_files
语句的最后一个元素。
例如:
location / {
try_files $uri @workspace;
}
location @workspace {
...
}
详情见this document。
$uri
变量包含前导 /
,因此您构造的路径名包含 //
,这可能是它们失败的原因。
例如:
location / {
root /home/tom/git/project/v3/$subdomain;
try_files /public$uri /workspace/public$uri =404;
}