Jekyll自动重定向匹配文章:解决WordPress迁移后URL索引问题
针对你从WordPress迁移到Jekyll后,旧URL(带错误日期)需要重定向到对应新日期URL的问题,这里有几个实用的解决方案,根据你的部署环境选择就行:
方法1:用Jekyll原生插件(最省心)
Jekyll的jekyll-redirect-from插件专门用来处理这类重定向需求,步骤很简单:
安装插件:在你的项目根目录的
Gemfile里添加一行:gem "jekyll-redirect-from"然后运行
bundle install完成安装。启用插件:在
_config.yml里加入插件配置:plugins: - jekyll-redirect-from给文章添加重定向规则:在每篇文章的Front Matter里,添加
redirect_from字段,把对应的旧URL填进去。比如你提到的那篇文章:--- title: "Apache IIS Tomcat Port 80 Çakışma Sorunu ve Çözümü" date: 2020-05-10 # 你的新日期 redirect_from: - /2018/01/01/apache-iis-tomtac-port-80-cakisma-sorunu-ve-cozumu ---当你构建Jekyll站点时,插件会自动为每个旧URL生成一个HTML重定向页面,访问旧链接的用户会自动跳转到新的文章页面。
方法2:用Apache的.htaccess批量处理(适合Apache服务器)
如果你的站点部署在Apache上,不想手动给每篇文章加规则,可以用Rewrite规则批量处理——不过前提是你的文章标题是唯一的(看起来你的情况符合)。
不过直接匹配标题跳转到新URL需要知道每篇的新日期,所以更可靠的方式是先整理一个重定向映射表:
创建
_data/redirects.yml文件,把所有旧URL和对应新URL列出来:- old: /2018/01/01/apache-iis-tomtac-port-80-cakisma-sorunu-ve-cozumu new: /2020/05/10/apache-iis-tomtac-port-80-cakisma-sorunu-ve-cozumu # 其他文章的对应关系依次添加在Jekyll里生成.htaccess规则:创建一个
htaccess.template文件,内容如下:RewriteEngine On {% for redirect in site.data.redirects %} RewriteRule ^{{ redirect.old | remove_first: '/' }}$ {{ redirect.new }} [L,R=301] {% endfor %}修改
_config.yml,让Jekyll把这个模板生成最终的.htaccess文件:include: - htaccess.template构建站点后,把生成的
htaccess.template重命名为.htaccess上传到服务器即可。
方法3:Netlify一键处理(适合Netlify部署)
如果你的站点部署在Netlify,直接在项目根目录创建一个_redirects文件,每行写一条重定向规则,格式是旧URL 新URL 301:
/2018/01/01/apache-iis-tomtac-port-80-cakisma-sorunu-ve-cozumu /2020/05/10/apache-iis-tomtac-port-80-cakisma-sorunu-ve-cozumu 301
Netlify会自动识别这个文件并处理永久重定向,非常方便。
注意事项
- 一定要用
301永久重定向,这样谷歌搜索引擎会更新它的索引,把旧URL的权重转移到新URL上,不会影响你的SEO表现。 - 如果文章数量很多,方法1需要逐个添加规则,但胜在原生支持;方法2或3适合批量处理,你可以写个小脚本从WordPress导出的文章数据里自动生成重定向映射表,节省时间。
内容的提问来源于stack exchange,提问作者erata

