Nginx 正在返回站点根索引而不是404
对不存在的文件的响应,即尝试重写不存在的不希望的文件。虽然我看到这个话题在这里得到了回答,但我没有看到它如何应用于我的配置,并且认为IF
在 Nginx 中使用语句是邪恶的?
这样做的目的是将/bar.html 和/bar/ 请求重定向到/bar。提供的数据来自 bar.html。对 /bar.random 的请求将返回站点 /index.html 内容而不是 404。对不存在的文件的请求应返回 404 错误页面。
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri.html /index.html @extensionless-html =404;
}
rewrite ^(/.+)/$ $1 permanent;
rewrite ^(/.+)\.html$ $1 permanent;
location @extensionless-html {
rewrite ^(.*)$ $1.html last;
}
我还尝试了以下导致相同响应的方法:
location / {
try_files $uri $uri.html /index.html @extensionless-html =404;
if (-f $request_filename) {
# redirect /foo/ to /foo
rewrite ^(/.+)/$ $1 permanent;
# redirect /foo.html to /foo
rewrite ^(/.+)\.html$ $1 permanent;
}
}
location @extensionless-html {
rewrite ^(.*)$ $1.html last;
}
根据反馈,
index.html
从try_files
允许 404 错误按需要工作。