最近看到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
效果还行,如下
评论 (0)