首页 > 解决方案 > nginx - 重定向到不带扩展名的 url 并在末尾添加斜杠

问题描述

使用 nginx,我想将所有静态 html URL(mydomain.com/index.html;mydomain.com/contact.html;mydomain.com/about.html)重定向到相同的 url,不带扩展名,但在结尾。

结束网址应该是这样的:

mydomain.com/index/

mydomain.com/contact/

mydomain.com/about/ ....

我怎样才能做到这一点?谢谢。

标签: nginxredirectservernginx-config

解决方案


这个问题有两个部分。首先是如何让服务器contact.html响应URI返回/contact/

有多种方法可以实现这一目标。例如:

location / {
    try_files $uri @rewrite;
}
location @rewrite {
    rewrite ^(/.+)/$ $1.html last;
    return 404;
}

任何以 a 结尾的 URI/都将在内部映射到由/替换的相同 URI .html


第二部分是如果人们仍在.html使用旧方案访问 URI,您可能希望从外部将他们重定向到新方案。

在不创建重定向循环的情况下实现此目的的最佳方法是检查存储在$request_uri. 例如:

if ($request_uri ~* "\.html(?|$)") {
    rewrite ^(.*)\.html $1/ permanent;
}

推荐阅读