使用Hexo博客的过程中,为了生成简洁且唯一链接不变的URL链接,我使用了hexo-abbrlink插件:

npm install hexo-abbrlink --save

然后再Hexo根目录下_config.yml里增加如下配置:

# 修改原链接格式:permalink: :year/:month/:day/:title/
permalink: posts/:year/:month/:abbrlink.html
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks

然后执行hexo clean & hexo g & hexo s,打开博客就会看到博客文章的html名称都变成了一串随机数。再去打开文章的md文件,文件头都增加了一行类似abbrlink: e89dcf68,这个abbrlink的值就是hexo-abbrlink插件给文章生成的唯一ID了。这个字段确保了在我们修改了Front-matter 内的博客标题title或创建日期date字段之后而不会改变链接地址,相当于每篇文章有了专属链接了,这样找搜索引擎收录也简单多了。


给文章生成永久链接原本是比较顺利的,但是几天之后新生成的文章链接居然变成了undefind.html,md文件里也没生成abbrlink,执行hexo clean & hexo g也没啥用。

去Google了一番这个问题,总结以下产生该问题的原因:

1.文章的链接变成了undefined.html,新的文章没问题,老的文章就不行了。首先要执行hexo clean 清楚掉以前生成的文章缓存,然后hexo g重新生成静态文件就ok了。

ps:hexo clean & hexo g多次还是无效,我这是老文章没问题,新文章不行。

2.如果全部文章的链接都有问题或者没有任何规律,总有一部分文章链接是undefined。建议检查一下文章开头的Front-matter,文章的Front-matter中不能设置layout,将layout属性删掉后就可以正常使用了。

ps:检查了md文件中并没有layout,再次无效。

3.与hexo-auto-category插件冲突。这2款插件都是读写 Front-matter 的数据。如果同时启用这2个插件,会导致hexo-abbrlink这个插件无法向 md 文件里写入 abbrlink 属性。

据hexo-abbrlink插件作者的说法,此问题无法修复,两个插件只能选其一。

abbrlink:
auto_category:
enable: false
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex

ps:我这里并没有使用hexo-auto-category插件,依旧无效。

试遍了诸般办法,没能解决问题,心血来潮去看了眼Hexo的扩展包文件package.json……纳尼?居然没有hexo-abbrlink……好吧,我这才想起来,昨天把Hexo给换了个目录,装了一大堆插件,hexo-abbrlink忘记装了。

所以,第4点原因:

4.检查package.json,查看有没有安装hexo-abbrlink插件(比如我这样更换Hexo文件夹的情况)。


安装和使用Hexo,请参考Hexo博客搭建指南