Feature image

Hexo站点迁移主题

介绍

今天把博客从blog.catx.me迁移到了catx.me,并关闭了原来的wordpress博客,算是完成了迁移的工作。
由于在过渡期也有若干个项目引用了博客的URL,所以迁移最后需要解决的问题是改变域名过后的重定向。
重定向包括两个方面:

  • 通过原URL的访客不会死链,会自动跳转到新URL
  • 搜索引擎能自动重新索引,不会降低页面排名

实现的原理就是在每个页面的<head>部分添加两个标签:

1
2
<meta http-equiv="refresh" content="0; url=http://new.domain.com/same/relative/url/of/old/site/">
<link rel="canonical" href="http://new.domain.com/same/relative/url/of/old/site/" />

第一个是给人看的,第二个是给机器看的。

前者会自动让浏览器跳转到新的域名,后者在搜索引擎的bot下次抓取页面的时候读取,重新索引到新的URL。

对于较大的站点,人肉在每个页面的标签很是麻烦,于是做了一个hexo的主题来实现这样一个功能(当然也有其他方式,不过主题是最简单的)。这并不是一个真正的主题,因为没有任何内容会被访问者看到。这个主题唯一的用途就是生成一个结构完全相同的站点,把每个页面重定向到一个新的域名上。

使用

以把在blog.catx.me上的站点迁移到catx.me上为例,创建repo、修改DNS、修改CNAME这些部署上的细节大同小异而又千变万化,不在此说明,过程如下:

  • 创建一个hexo博客文件夹的副本
  • 在副本文件夹中安装这个主题:
1
$ git clone https://github.com/akfish/hexo-theme-redirect.git themes/redirect
  • 修改副本站点的_config.yml文件,使用主题:
1
theme: redirect
  • 修改副本站点的_config.yml文件,添加如下行指定新域名:
1
new_domain: catx.me
  • 修改副本站点的部署配置,部署到blog.catx.me(老域名)
  • 修改原站点的部署配置,部署到catx.me(新域名)

这样就完成了迁移工作,比如访问http://blog.catx.me就会自动跳转到http://catx.me

其它

如果你的站点部署在GitHub Pages上,老域名恰好在yourname.github.io repo的CNAME绑定过,那么你其它项目的GitHub Pages的URL也需要设置跳转。

比如有个项目foo,原有的gh-pages地址就是http://blog.catx.me/foo,那么就可以在副本站点中运行:

1
$ hexo new page foo

部署后就能实现跳转。需要注意的是,hexo生成的页面路径全是小写,如果服务器是区分大小写的,就需要手动在source里修改成正确的形式。

源代码

hexo-theme-redirect