配置

永久链接配置

用 pattern 与目标匹配器自定义页面 URL 的生成规则。

概述

permalinks 配置用于为页面定义自定义 URL 模式。Hugo 支持两种书写形式:

形式 结构 适用场景
映射形式(map) 按页面类型(page kind)分组的键值对 按顶级区段统一指定模式
数组形式(array) 由若干条 pattern 条目组成的数组 需要用页面匹配器精确定位页面子集

映射形式

以页面类型(page kind)为键,为每个顶级区段定义 URL 模式。例如为 articles 区段配置模式:

[permalinks.page]
articles = '/blog/:year/:month/:slug/'

[permalinks.section]
articles = '/blog/'

可用的页面类型键如下:

键名 作用范围
page 普通内容页。
section 区段页。
term 分类法术语页。
taxonomy 分类法列表页。

每个键之下再以区段名为键,值是模式字符串。

按语言配置时,把 permalinks 区段嵌在语言键之下:

[languages]
  [languages.de]
    label = 'Deutsch'
    locale = 'de-DE'
    weight = 1
    [languages.de.permalinks]
      [languages.de.permalinks.page]
        articles = '/artikel/:year/:month/:slug/'
      [languages.de.permalinks.section]
        articles = '/artikel/'
  [languages.en]
    label = 'English'
    locale = 'en-US'
    weight = 2
    [languages.en.permalinks]
      [languages.en.permalinks.page]
        articles = '/blog/:year/:month/:slug/'
      [languages.en.permalinks.section]
        articles = '/blog/'

数组形式

定义一个永久链接条目数组,把不同的 URL 模式应用到不同的页面子集。每个条目必须有 pattern 键,Hugo 采用第一个匹配成功的模式。

可选的 target 键接受一个页面匹配器;省略 target 时,该模式应用于所有页面。

键名 类型 是否必填 含义
pattern string 是 URL 模式,可包含下方 token 表中的标记。
target map 否 页面匹配器,用于限定该条目作用的页面范围。

页面匹配器支持以下关键字:

关键字 类型 含义
environment string 匹配构建环境的 glob 模式,例如 {staging,production}。
kind string 匹配页面类型的 glob 模式,例如 {taxonomy,term}。
path string 匹配页面逻辑路径的 glob 模式,例如 {/books,/books/**}。
sites map 站点矩阵,匹配语言、版本、角色等任意内容维度组合。

例如,分别为 articles 区段页与其叶子页面应用语言相关的 URL 模式:

[[permalinks]]
  pattern = '/artikel/'
  [permalinks.target]
    path = '{/articles}'
    [permalinks.target.sites]
      [permalinks.target.sites.matrix]
        languages = ['de']

[[permalinks]]
  pattern = '/artikel/:year/:month/:slug/'
  [permalinks.target]
    path = '{/articles/**}'
    [permalinks.target.sites]
      [permalinks.target.sites.matrix]
        languages = ['de']

[[permalinks]]
  pattern = '/blog/'
  [permalinks.target]
    path = '{/articles}'
    [permalinks.target.sites]
      [permalinks.target.sites.matrix]
        languages = ['en']

[[permalinks]]
  pattern = '/blog/:year/:month/:slug/'
  [permalinks.target]
    path = '{/articles/**}'
    [permalinks.target.sites]
      [permalinks.target.sites.matrix]
        languages = ['en']

若要为非此前所有条目都未匹配到的页面提供兜底,把不带 target 键的模式放在数组末尾:

[[permalinks]]
pattern = '/:section/:slug/'

可用 token

在模式字符串中可使用下列 token。

token 含义
:year 前置元数据 date 字段中的 4 位年份。
:month 前置元数据 date 字段中的 2 位月份。
:monthname 前置元数据 date 字段中的月份名称。
:day 前置元数据 date 字段中的 2 位日期。
:weekday 前置元数据 date 字段中的 1 位星期序号(星期日为 0)。
:weekdayname 前置元数据 date 字段中的星期名称。
:yearday 前置元数据 date 字段中的年内第几天,1 至 3 位。
:section 内容所属区段。
:sectionslug 内容所属区段的 slug 化名称(自 v0.149.0 起可用)。
:sections 内容的区段层级,支持切片语法,如 :sections[1:]、:sections[:last]、:sections[last]、:sections[1:2]。
:sectionslugs 区段层级的 slug 化名称,同样支持切片语法(自 v0.149.0 起可用)。
:title 前置元数据 title,否则为自动标题。
:slug 前置元数据 slug,否则为 title,否则为自动标题。
:filename 已废弃(v0.144.0),请改用 :contentbasename。
:slugorfilename 已废弃(v0.144.0),请改用 :slugorcontentbasename。
:contentbasename 内容基础名(自 v0.144.0 起可用)。
:slugorcontentbasename 前置元数据 slug,否则为内容基础名(自 v0.144.0 起可用)。

其中 slug 化名称取自前置元数据 slug,否则取自 title,否则取自动标题。切片访问不会抛出越界错误,因此无需精确计算下标。

时间相关的值也可以使用 Go time 包 中定义的时间布局组件,例如:

permalinks:
  posts: /:06/:1/:2/:title/