nginx - nginx process = 404 如何在try_files中回退
问题描述
我有一个示例 Web 服务器,在 www 目录中只有一个 index.html 文件。我可以使用以下配置设置 nginx:
location /subfolder {
alias /data/www;
try_files $uri $uri/ /index.html;
}
在浏览器中,我可以在我的本地域上看到正确的响应test.local/subfolder
,还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
解决方案
该try_files
指令仅支持以下语法:
try_files file ... uri;
try_files file ... =code;
它不支持:
try_files file ... uri =code;
file
和这里的区别在于uri
,对于file
参数,NGINX 会在继续下一个参数之前检查它们的存在;因为uri
,它不会。
如果最后一个参数的形式是 a =code
,那么它的所有先前参数都是file
s (检查是否存在)。
由此,您可以得出一个结论,即使用请求 URI/foo/bar
和此配置:
root /var/www;
location /foo/ {
try_files $uri $uri/ =404;
}
file
...如果存在任何 s ,则不会触发 404 错误:
/var/www/foo/bar
/var/www/foo/bar/
目录(如果您已autoindex
启用)/var/www/foo/bar/index.html
(或index.php
等)(由于 的值index
)
只有当以上都不存在时,NGINX 才会触发 404 错误。
推荐阅读
- azure-devops - How to specify "date precision" when querying VSTS through a hyperlink
- python - 在 dict 中创建一个给定长度的随机数列表,每次引用它时都会重新处理
- json - 使用 VBA-JSON 从 API 中提取“错误:对象不支持此属性或方法”?
- python - 如何修复'ModuleNotFoundError:'kivy.garden.matplotlib.backend_kivyagg''
- html - Displaying the menu text when hovered
- jenkins - gitlab & jenkins,“找不到支持服务器的客户端构建器”错误
- java - 如何识别 AWS 中哪个 lambda 失败并重新运行它
- ios - Swift DispatchGroup causes error: [Firebase/Firestore][I-FST000001] Could not reach Cloud Firestore backend
- react-native - How do I specifically check a URL with NetInfo React-Native?
- angularjs - Wait for a request to finish before doing another one in angularjs