我有一个示例 Web 服务器,www 目录中只有一个 index.html 文件。我可以使用以下配置设置 nginx:
location /subfolder {
alias /data/www;
try_files $uri $uri/ /index.html;
}
在浏览器中,我可以在本地域上看到正确的响应test.local/subfolder
, also test.local/subfolder/something
返回默认的nginx页面(这是正常的,因为没有设置root)
如果我将配置更改为
location /subfolder {
alias /data/www;
try_files $uri $uri/ /index.html =404;
}
响应test.local/subfolder
仍然是正确的,但是test.local/subfolder/something
所有带有 /subfolder 前缀的 URI 都会返回正确响应的 index.html,状态也为 200 而不是 404。如果我删除/index
从 try_files 我得到相同的结果
我想知道 nginx 如何处理带有 =404 回退的请求,但找不到任何信息,甚至在官方文档中也找不到。
UDAPTE:
我发现别名指令应该以/
但仍然没有得到 =404 功能和目的,因为状态仍然是 200ok
The try_files https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files指令仅支持这些语法:
try_files file ... uri;
try_files file ... =code;
它不支持:
try_files file ... uri =code;
和...之间的不同file
and uri
这里,是为了file
参数,NGINX 将检查它们的存在在继续下一个论点之前;为了uri
,不会的。
如果最后一个参数的形式为=code
,那么它的所有先前参数都是file
s(检查是否存在)。
由此,你可以得到一个结论:通过请求URI/foo/bar
和这个配置:
root /var/www;
location /foo/ {
try_files $uri $uri/ =404;
}
...如果出现以下任一情况,都不会触发 404 错误file
s exist:
/var/www/foo/bar
-
/var/www/foo/bar/
目录(如果你有autoindex
已启用)
-
/var/www/foo/bar/index.html
(or index.php
等)(由于值index
)
Only当以上都不存在时,NGINX将触发404错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)