首页 > 解决方案 > 在 Nginx 中创建一个 301 重定向,从某些 URL 路径中删除“.html”结尾?

问题描述

如何在 Nginx 中创建一个 301 重定向,.html从某些 URL 中删除结尾?

我想将所有博客文章 (301) 重定向到相同的 URL,但没有.html.

例如:

www.mydomain.com/blog/post1.html -> www.mydomain.com/blog/post1 www.mydomain.com/blog/post2.html -> www.mydomain.com/blog/post2

注意:我只想html从 www.mydomain.com/blog/中删除并保留其余的站点路径。

我设法为每个帖子创建了一个重定向,但肯定有比这更好的方法:

rewrite ^/blog/post1.html$ https://www.mydomain.co.uk/blog/post1 permanent;

标签: nginxredirecthttp-status-code-301

解决方案


location ~ ^/(.*)\.html$ {
    return 301 https://$host/$1;
}

仅对于博客子路径,这也应该有效:

location ~ ^/blog/(.*)\.html$ {
    return 301 https://$host/blog/$1;
}

应该做的伎俩。

~ 表示正则表达式。

^ 和 $ 表示正则表达式的开始和结束。

(.*) 表示捕获任意数量的未定义字符( . 表示未定义 * 表示任意数量)

.html 表示以 .html 结尾(哇)

然后将其全部重定向到 https://$host/$1 ,其中 host 是通过的主机, $1 是位置正则表达式中捕获的字符串。

试试看,让我知道它是否适用于您的环境。


推荐阅读