固定链接 永久链接 Permalinks

永久链接是页面、文章或集合的输出路径。它们允许你在源代码的目录结构和输出目录之间做不同的组织。

页面头部参数(Front Matter)

设置永久链接最简单的方法是使用页面头部参数(front matter)。你可以在页面头部参数中设置 permalink 变量为你希望的输出路径。

例如,你的网站上可能有一个页面位于 /my_pages/about-me.html,你希望输出的 URL 是 /about/。你可以在该页面的页面头部参数中设置:

---
permalink: /about/
---

全局配置

为你网站的每个页面在页面头部参数中设置永久链接并不方便。幸运的是,Jekyll 允许你在 _config.yml 文件中全局设置永久链接结构。

要设置全局永久链接,你可以在 _config.yml 中使用 permalink 变量。你可以使用占位符来指定你想要的输出路径。例如:

permalink: /:categories/:year/:month/:day/:title:output_ext

请注意,页面和集合(不包括 postsdrafts)没有时间和类别(对于页面,上述 :title 等价于 :basename),这些永久链接样式的部分在输出时会被忽略。

例如,对于 posts 集合,永久链接样式 /:categories/:year/:month/:day/:title:output_ext 会变为 /:title.html,而对于页面和集合(不包括 postsdrafts)来说,输出为 /:title.html

占位符 Placeholders

以下是可用占位符的完整列表:

变量 Variable 说明 Description

year

从文章文件名中提取的四位数字年份。可通过文档的 date Front Matter(页面头部参数)覆盖。

short_year

从文章文件名中提取的年份,不包括世纪部分(00..99)。可通过文档的 date Front Matter(页面头部参数)覆盖。

month

从文章文件名中提取的月份。(01..12)可通过文档的 date Front Matter(页面头部参数)覆盖。

i_month

从文章文件名中提取的月份,不包括前导零。可通过文档的 date Front Matter(页面头部参数)覆盖。

short_month

三字母月份缩写,例如“Jan”。

long_month

4.0

完整的月份名称,例如“January”。

day

从文章文件名中提取的日期(01..31)。可通过文档的 date Front Matter(页面头部参数)覆盖。

i_day

从文章文件名中提取的日期,不包括前导零。可通过文档的 date Front Matter(页面头部参数)覆盖。

y_day

从文章文件名中提取的年度天数,带前导零。(001..366)

w_year

4.0

周年份,可能与月份年份不同,尤其是在一月初和十二月末的三天内。

week

4.0

当前年份的周数,第一周包含大部分一月的天数。(01..53)

w_day

4.0

一周中的天数,从星期一开始。(1..7)

short_day

4.0

三字母星期几缩写,例如“Sun”。

long_day

4.0

星期几的名称,例如“Sunday”。

hour

一天中的小时,24小时制,来自文章的 date Front Matter(页面头部参数),带前导零。(00..23)

minute

小时中的分钟,来自文章的 date Front Matter(页面头部参数)。(00..59)

second

分钟中的秒数,来自文章的 date Front Matter(页面头部参数)。(00..59)

title

文档文件名中的标题。可以通过文档的 slug Front Matter(页面头部参数)覆盖。保持源文件中的大小写。

slug

文档文件名中的 slug(标题的缩写形式,所有非字母数字字符替换为连字符)。可以通过文档的 slug Front Matter(页面头部参数)覆盖。

categories

文章指定的类别。如果文章有多个类别,Jekyll 会创建一个层级(例如 /category1/category2)。另外,Jekyll 会自动解析 URL 中的双斜杠,如果没有类别,则忽略此项。

slugified_categories

4.1

文章指定的类别,但已被 slug化。如果类别由多个单词组成,Jekyll 会将所有字母小写,并将任何非字母数字字符替换为连字符。(例如 "Work 2 Progress" 会被转换为 "work-2-progress"

如果文章有多个类别,Jekyll 会创建一个层级(例如 /work-2-progress/category2)。另外,Jekyll 会自动解析 URL 中的双斜杠,如果没有类别,则忽略此项。

:output_ext

输出文件的扩展名。(默认包含,通常不需要)

文章(posts)内置格式

对于文章(posts),Jekyll 还提供了以下几种内置格式以方便使用:

固定链接样式 Permalink Style URL 模板 URL Template

date

/:categories/:year/:month/:day/:title:output_ext

pretty

/:categories/:year/:month/:day/:title/

ordinal

/:categories/:year/:y_day/:title:output_ext

weekdate

4.0

/:categories/:year/W:week/:short_day/:title:output_ext
(W 会被添加到 :week 的值前面)

none

/:categories/:title:output_ext

你可以直接使用 permalink: pretty 来代替 permalink: /:categories/:year/:month/:day/:title/

通过Front Matter(页面头部参数)指定固定链接

内置的固定链接样式在Front Matter(页面头部参数)中无法识别。因此,permalink: pretty 是无法生效的。

集合 Collections

对于集合(包括 postsdrafts),你可以在 _config.yml 文件中覆盖集合的全局固定链接:

collections:
  my_collection:
    output: true
    permalink: /:collection/:name

集合支持以下占位符:

变量 Variable 描述 Description

:collection

包含该集合的标签。

:path

相对于集合目录的文档路径,包含文档的基本文件名。

:name

文档的基本文件名,将所有空格和非字母数字字符替换为连字符。

:title

:title 模板变量将取决于文档中的 slug Front Matter(页面头部参数) 变量值(如果定义了);如果没有定义,:title 将等同于 :name,即从文件名生成的 slug,且会保留原始大小写。

:output_ext

输出文件的扩展名。(默认包含,通常不需要。)

页面 Pages

对于页面,你需要在Front Matter(页面头部参数)中设置固定链接(permalink)来覆盖全局配置。
如果你在 _config.yml 的默认Front Matter(页面头部参数)(front matter defaults)中设置了 permalink,它将被忽略。

页面支持以下占位符:

变量 Variable 描述 Description

:path

页面相对于站点源目录的路径,不包括页面的基本文件名。

:basename

页面的基本文件名。

:output_ext

输出文件的扩展名。(默认包含,通常不需要。)