Nginx 重写不存在的文件

Nginx 重写不存在的文件

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.htmltry_files404 错误即可按预期工作。

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;
}

相关内容