今天倒腾了一下午 Hugo 目录的重定向,记录一下:
问题 Link to heading
我之前的 Hugo 目录结构是这样的:
1tree -L 2 .
2├── content
3│ ├── notes
4│ ├── algorithm
5│ ├── develop
6├── themes
7│ └── hugo-coder
8└── vercel.json
按照 hugo-coder 主题文档,目录结构将会有 notes, algorithm, develop 等。
但我发现 hugo-coder 主题专门为 posts 目录做了额外的样式定义,我也想让 notes, algorithm, develop 等目录沿用类似的格式。
第一,我不想修改或覆写 hugo-coder 主题文件,后续更新主题时需要手动合并修改,太麻烦了。
第二,我不想改变最终编译出来的目录结构,这样会导致已有的链接全部失效。
探索 Link to heading
最相关的就是 how to use the same layout in a different directory 这篇文章了。
里面提出了两种方法:
-
使用 archetype,为所有已经创建的笔记加上
layout
,type
等属性。1--- 2type: "posts" 3layout: "posts" 4---
这种方式出了修改现在的笔记,还要修改后续创建的所有文件,我觉得不太方便。
-
将
notes
,algorithm
,develop
移动到posts
目录下,然后在config.toml
中配置permalinks
。这个方法不错,研究了半天终于搞明白了。
Permalinks 永久链接 Link to heading
Permalinks 可以为 content 目录下的文件在静态编译的时候重定向到指定的目录。
举例:
1content/
2├── posts/
3│ ├── bash-in-slow-motion.md
4│ └── tls-in-a-nutshell.md
5├── tutorials/
6│ ├── git-for-beginners.md
7│ └── javascript-bundling-with-hugo.md
8└── _index.md
1[permalinks]
2 [permalinks.page]
3 posts = '/articles/:year/:month/:slug/'
4 tutorials = '/training/:slug/'
5 [permalinks.section]
6 posts = '/articles/'
7 tutorials = '/training/'
会将 posts 文件夹重定向为 article, tutorials 文件夹重定向为 training。此外,每篇文章链接前头会加上年月日。
解决 Link to heading
按照我的需求,我需要将 /posts/notes
, /posts/algorithm
, /posts/develop
重定向为 notes
, algorithm
, develop
。
因此我的配置是:
1[permalinks]
2 [permalinks.page]
3 posts = '/:sections[last]/:slug/'
4 [permalinks.section]
5 posts = '/:sections[last]/'