登录
  • 人们都希望被别人需要 却往往事与愿违
  • 雪崩时, 没有一片雪花觉得自己有责任 @伏尔泰 (启蒙思想家)

我和 Nginx 二级目录 rewrite、Jekyll、Typecho 的故事

Linux Benny 小土豆 8117 次浏览 1899 字 10 个评论
文章目录 [显示]
这篇文章在 2017 年 07 月 11 日 16:48:45 更新了哦~

几天前小蜗牛童鞋决定从 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 规则如下:

  1. rewrite ^/cn/(.*)/$ https://www.tougetu.com/;

访客们倒是能被重定向到对应的新博文,但是这样对 SEO 就有一些影响了,毕竟 Google 已经爬了好些,咱再改永久链接不好啊。

3. 完美的解决方案

第三个方案则是最好的,rewrite 规则如下:

  1. 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 什么的。
所以总结就是,做好统筹规划工作,然后再干事吧!耶!


文章版权归原作者所有丨本站默认采用 CC-BY-NC-SA 4.0 协议进行授权 |
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/nginx-jekyll-typecho.html
喜欢 (5)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(10) 个小伙伴在吐槽
  1. 土豆老师,向您请教个问题! 我全新安装的 typecho,安装在根目录下的 / typecho / 下,遇到个问题,如何直接访问域名就能访问到这个 typecho 程序,而不是 *.com/typecho/,这样的路径呢?
    波罗 2017-12-21 08:58 回复
    • 最简单 的办法,直接给移动到根目录就好啦
      Benny 小土豆 2017-12-21 09:00 回复
      • 如何依然想把 typecho 放在子目录下,但又想直接正常访问域名,有办法指导下吗
        波罗 2017-12-21 09:34 回复
        • 这…… 好吧。写这么一条 rewrite 试试rewrite "^/typecho$" https://$host permanent;,访问 www.example.com/typecho 时会跳到 www.example.com
          Benny 小土豆 2017-12-21 09:56
  2. 去年从 wordpress 迁移过 typecho,用的官方插件。 1. 代码高亮会丢失,需要每篇文章都重新用 markdown 标记一下。 2. 七牛云的图片会丢失,不太清楚放在本地的会不会,换 typecho 后才发现,一两个月才更新一次,上个毛的七牛云。 其他的没什么了,官方的插件迁移的时候是迁移的 html 语句,不会格式化为 markdown。
    守夜人 2017-04-08 00:34 回复
    • 哈哈,选择好环境了就不要来回变嘛!尤其是不支持 md 的和支持 md 的,会太酸爽!
      Benny 小土豆 2017-04-08 08:23 回复
  3. 入了 WordPress 的坑(那时还不怎么用 Markdown 和 LaTex),几次想换 Typecho 不成功 :sad:
    劲腾 2017-03-30 17:42 回复
    • Typecho 确实够简洁,我近期也在着手改一个 Typecho 主题。我记得貌似有插件可以导入 WordPress 文章的呀。
      Benny 小土豆 2017-03-30 17:43 回复
      • 官方的那个 Wordpress 转 Typecho 的插件版本比较旧,没敢用 :evil:
        劲腾 2017-04-01 10:01 回复
        • :mrgreen: 拿个马甲站做测试!
          Benny 小土豆 2017-04-01 10:03
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿