让代码更简单

Nginx规则解决网站改版链接改变访问404问题

重要:本文最后更新于2022-10-27 09:04:59,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

最近看到nginx中有一些4年前的网页路径在访问,虽然看起来不像是什么正经访客,但我不允许有那么多错误访问,于是打算将这些为改版的网页地址重定向到新地址上。

当初刚网站链接结构的时候是在wp大学下载的一个名叫 WP Permalinks Migration 的插件,不过已经停更多年,据说已经不支持现在的wordpress版本了。于是准备使用nginx的规则来重定向,比起WP Permalinks Migration插件来说,nginx的重定向规则响应肯定更快。

由于Nginx的规则使用了正则表达式,如果你不知道你的正则能不能正常使用,可以通过grep -P命令来测试

复制
 grep --help

# ...

Regexp selection and interpretation:
  -E, --extended-regexp     PATTERN is an extended regular expression (ERE)
  -F, --fixed-strings       PATTERN is a set of newline-separated strings
  -G, --basic-regexp        PATTERN is a basic regular expression (BRE)
  -P, --perl-regexp         PATTERN is a Perl regular expression
  -e, --regexp=PATTERN      use PATTERN for matching
  -f, --file=FILE           obtain PATTERN from FILE
  -i, --ignore-case         ignore case distinctions
  -w, --word-regexp         force PATTERN to match only whole words
  -x, --line-regexp         force PATTERN to match only whole lines
  -z, --null-data           a data line ends in 0 byte, not newline

# ...

连接上服务器,在终端中输入如下命令

复制
echo 'a.gif' | grep -P '\.(jp?g|gif|bmp|png)'

#输出
a.gif

如果只想输出匹配部分,则加上-o参数

复制
echo 'a.gif' | grep -P -o '\.(jp?g|gif|bmp|png)'

#输出
.gif

本站以前的网页地址 /wordpress/test/123.html,现在的网页地址:/123.html,适用正则

复制
^/(.*)/(\d+).html$

找到nginx的配置文件,注意:如果你的网站使用了伪静态规则,那么一般会存在如下所示的规则

复制
location /
{

	 try_files $uri $uri/ /index.php?$args;
}

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

增加我们的重定向规则后

复制
location /
{
         rewrite ^/(.*)/(\d+).html$ /$2.html permanent;
	 try_files $uri $uri/ /index.php?$args;
}

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

如果没有使用伪静态,且配置文件中没有存在下面形式的代码

复制
location /
{

}

则新增,新增后

复制
location /
{
      rewrite ^/(.*)/(\d+).html$ /$2.html permanent;
}

其实,不用写在这里面也是可以的,不过官方文档让写里面还是写里面吧。如果你实在是不想看前面的内容,那么直接复制那句重定向规则到配置文件里就行了。

简单说说这句规则的意思, rewrite 的中文是重写的意思,不用解释。 ^/(.*)/(\d+).html$ 这句正则匹配以/开头+不限长度的字符串+/+不限长度的数字+以.html结束的url。 /$2.html 表示重定向后的地址,$2表示前面的正则规则中第二个括号里面的规则(\d+)匹配到的内容。 permanent 表示301重定向,如果想使用302,可以换成redirect

效果还行,如下

网站链接改变Nginx重定向规则
网站链接改变Nginx重定向规则

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐