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;
}
答案1
根据反馈,删除index.html
后try_files
404 错误即可按预期工作。
location / {
try_files $uri $uri.html @extensionless-html =404;
}
# redirect /foo/ to /foo
rewrite ^(/.+)/$ $1 permanent;
# redirect /foo.html to /foo but
rewrite ^(/.+)\.html$ $1 permanent;
location @extensionless-html {
rewrite ^(.*)$ $1.html last;
}