Hugo博客永久链接
目录
简单开局
重新折腾了一下博客结构,发现了hugo里有个slug
,这玩意支持为文章生成永久链接。速记一下。
随着博客内容愈来愈多,我会根据自己的偏好去调整content
目录下的文章结构。按hugo的默认设置,一旦文章的目录结构变动,链接随即失效、无法访问;而使用slug
后,可以给文章自定义永久链接,也可以有效避免中文title带来的链接超长观感 ~
参考文档:
基础用法
-
在设置中开启permalinks
注:我主要使用
posts/
和do-list/
这两个文件夹存放内容,故都设置了一下
# config/_default/config.toml
# 永久链接,可按年月日自定义路径
[permalinks]
posts = "/posts/:year/:slug"
do-list = "/do-list/:slug"
- 每篇文章的 Front Matter 中填写slug,如下所示
---
title: "Hugo博客永久链接"
date: 2023-09-06T01:01:52+08:00
draft: false
tags: ["Blog"]
slug: blog-slug
---
正文内容
完成以上两步,推送更新后,即可生成文章的永久链接。比如这一篇,链接会是:
http://im.happytoo.cyou/do-list/blog-slug/
只要我不换域名,这个链接将一直有效。
进阶玩法
以下内容主要参考第二篇文档。
在archetypes/
下配置好默认的 Front Matter ,再使用hugo new <post's name>
命令创建新文章,这样可以按默认配置自动生成。
- 配置默认Front Matter
# archetypes/default.md
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: false
slug: {{ substr (md5 (printf "%s%s" .Date (replace .TranslationBaseName "-" " " | title))) 4 8 }}
---
不太了解的内容去问了下ChatGPT:(后面想法子加个折叠块吧)
-
Q: 请帮我解释一下
-
A: 是 Hugo 博客中 Front Matter(前置元数据)字段的一部分,它用于生成文章的 slug(URL 友好的标识符)。让我详细解释这段代码:
-
slug::这是 Front Matter 中的字段,用于指定文章的 URL 路径的一部分,通常是短、友好的文本。
-
{{ … }}:这是 Hugo 模板语法,允许你在 Front Matter 中使用 Go 模板函数来生成或处理字段的值。
-
md5:这是一个哈希函数,用于生成字符串的 MD5 哈希值。MD5 哈希值通常用于将文本转换为唯一的、固定长度的字符串,以便用作标识符。
-
printf “%s%s” .Date (replace .TranslationBaseName “-” " " | title):这是一个复杂的表达式,用于构建一个字符串,该字符串将在后续的 MD5 哈希计算中使用。
-
让我们分解它:
-
.Date:这是 Hugo 内置的变量,表示文章的发布日期。
-
replace .TranslationBaseName “-” " " | title:这一部分首先使用 replace 函数将文章的文件名中的破折号(-)替换为空格,然后使用 title 函数将字符串中的每个单词的首字母大写。这确保了标题的格式是适合用作 slug 的。
-
substr … 4 8:最后,使用 substr 函数来提取字符串的一部分,从第 4 个字符(0 索引)开始提取长度为 8 的子字符串。这个子字符串将成为文章的 slug。
-
-
-
总的来说,上述模板代码的作用是生成一个文章的 slug,该 slug 基于文章的发布日期和标题,经过一系列的字符串操作和哈希处理,确保生成一个独一无二的标识符,以用作文章的 URL 路径。生成的 slug 将在 Hugo 构建过程中自动应用到文章中,以创建文章的 URL。这可以帮助确保文章的 URL 友好、唯一,并适用于 SEO。
hugo new
命令创建新文件
比如说我这篇文章在content/do-list/
下创建,那么运行命令:
hugo new do-list/Hugo博客永久链接.md
成功生成,并且 Front Matter 为
---
title: Hugo博客永久链接"
date: 2023-09-06T01:01:52+08:00
draft: false
slug: 9a857896
---
以上,结束。
最后更新于: 2024 年 10 月 25 日