几天前小蜗牛童鞋决定从Jekyll回到Typecho,好像也没啥大不了的。好在这俩都是支持markdown的,笨方法就是复制粘贴手动处理下。
于是乎很快的上了HTTPS+HSTS+HSTS Preload List,随后不久发现问题来了。
在SEO上有这么个问题,原来的url都是形如http://mingyueli.com/cn/2016/11/03/python-backup-script/
这样的,但是现在对应的URL却是https://www.tougetu.com/2016/11/python-backup-script.html
我们仔细观察下能发现,现在多了个www
,少了个cn
,少了个日期,最后少了个/
多了个.html
原来的URL模式下Google已经收录了一些,现在的也收录了好些(好像是今天一天爬的),但是现在访问原来的URL会404,蜘蛛怎么会喜欢404呢?所以作为一个有灵性的码农,咱自然要处理下这个问题。我想了这么几个方案:
1.原来的url管他什么的,就跳转到现在的主页;
2.对现在的永久链接格式进行一点修改,给加上日期这一行;
3.把原来的url完美跳转到现在的模式
1. 直接跳转主页
第一个最简单了,直接在mingyue.com.conf
中server段加个rewrite ^/cn/(.*)/$ https://www.tougetu.com/;
就可以了。这样的话管他是啥样的,都给定向到首页了。 这样对搜索引擎倒是没太大事,但是访客们可能就懵逼了,我要看的博文咋变成首页了?通常来说大部分人在大部分情况下就会选择关闭了。
2.更改永久链接并跳转
第二个方案需要进入Typecho后台,将永久链接(也就是固定链接啦)改成/{year}/{month}/{day}/{slug}.html
,rewrite规则如下:
rewrite ^/cn/(.*)/$ https://www.tougetu.com/;
访客们倒是能被重定向到对应的新博文,但是这样对SEO就有一些影响了,毕竟Google已经爬了好些,咱再改永久链接不好啊。
3.完美的解决方案
第三个方案则是最好的,rewrite规则如下:
rewrite "^/cn/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)/$" https://www.tougetu.com/$1/$2/$4.html;
这样蜘蛛们也看不到404,访客们又能被重定向到新的正确的地址下。
头一次体验到了/etc/init.d/nginx reload
是多么的有用
后续总结与思考
我对Nginx的了解也不多吧,但是通过这次,我至少知道了一点点rewrite的写法,下面总结一下备忘并分享给可能遇到了一样坑爹问题的童鞋们吧!
rewrite语法:rewrite regex replacement flag
第二个regex是正则表达式,第三个是替换之后,第四个是标志,有这么四个
1.last 相当于apache里面的[L]标记,表示rewrite。
2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
3.redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
4.permanent 返回301永久重定向, 浏览器地址会显示跳转后的URL地址。
在正则中如果需要使用{}则需要用双引号或者是单引号把正则扩起来(因为nginx中{}标志着块的结束和开始)
所以,上面我这一串正则^/cn/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)/$
含义就是:
匹配/cn/开头的、0到9数字出现四次、/、0-9数字出现2次、/、0-9数字出现两次、/、任意字符、/结尾
再看下我们原始的URL
http://mingyueli.com/cn/2016/11/03/python-backup-script/
非常恰当的匹配上了,然后$1的含义就是第一对()中的内容,$2的含义就是第二对(),依此类推……所以$1/$2/$4也就对应这2016、11、 python-backup-script,组合起来也就是2016/11/python-backup-script.html
,于是任务就结束咯。
当然这样也有一些还是无法处理,比如说后来自己改了url的……本大神虽说很厉害,但是这样也是很无奈的呀!
所以说啊,学好正则简直太重要了嘛!正则表达式无处不在嘛!不会正则好意思说自己是用Linux的嘛,是吧。
想当初我换域名和换二级目录的时候,我也是这么折腾过,只不过那时候不会用rewrite什么的。
所以总结就是,做好统筹规划工作,然后再干事吧!耶!
rewrite "^/typecho$" https://$host permanent;
,访问www.example.com/typecho时会跳到www.example.com