之前使用 Hexo 的时候,用的是 hexo-abbrlink 插件来处理永久链接,而换到了 Hugo 之后,由于 Hugo 没有插件系统,所以就采用了简单的 /year/month/day/name 形式处理永久链接。

昨晚临睡前翻了翻 Hugo 文档,发现了 Hugo 有一系列自建函数,实验过后可以生成类似于 hexo-abbrlink 效果的永久链接,就写了这篇文章记录。

1. 永久链接生成方案

永久链接的生成方案是比较简单的,直接对时间 + 文章名生成字符串做一下 md5 然后取任意 4-12 位即可。这样做的话 md5 冲撞概率极小,同时也没有那么大的运算负担。

而 Hugo 在永久链接中支持下面这个参数:slug。简单来说,我们可以针对每一篇文章指定一个 slug,然后在 config.toml 中配置 permalinks 包含 slug 参数,就可以生成唯一的永久链接。我们的目的就是对每篇文章自动生成一个 slug

修改 archetypes/default.md 添加如下一行:

1
2
3
4
5
---
#...
slug: {{ substr (md5 (printf "%s%s" .Date (replace .TranslationBaseName "-" " " | title))) 4 8 }}
#...
---

这样在每次使用 hugo new 的时候就会自动填写一个永久链接了。

之后修改 config.toml 添加如下行:

1
2
[permalinks]
  post = "/post/:slug"

生成站点就可以了。

2. 页末显示本文永久链接

既然有了永久链接,那么在版权页做一个分享也是很简单的了。

我已经修改好了一个主题,可以直接 clone 这个新主题代替原版:http://github.com/lxdlam/hugo-theme-even

然后前往 config.toml,添加如下项:

1
enablePermalinks = true

重新生成页面就可以了。