返回介绍

永久链接

发布于 2020-10-18 07:35:24 字数 6214 浏览 1171 评论 0 收藏 0

Jekyll 支持以灵活的方式管理你网站的链接,你可以通过 ConfigurationYAML 头信息 为每篇文章设置永久链接。你可以随心所欲地选择内建链接格式,或者自定义链接格式。默认配置为 date

永久链接的模板用以冒号为前缀的关键词标记动态内容,比如 date 代表 /:categories/:year/:month/:day/:title.html

模板变量

变量描述

year

文章文件名中的年份,格式如 `2013`

month

文章文件名中的月份,格式如 `01`

i_month

文章文件名中的月份,不包含首位的零,格式如 `1`

day

文章文件名中的日期,格式如 `08`

i_day

文章文件名中的日期,不包含首位的零,格式如 `8`

short_year

文章文件名中的年份,后两位,格式如 `13`

hour

时钟,24 小时制,日期以文章的头信息中的 date 为基准。(00..23)

minute

当前时钟内的分钟,日期以文章的头信息中的 date 为基准。(00..59)

second

当前分钟内的秒钟,日期以文章的头信息中的 date 为基准。(00..59)

title

由文件的文件名中确定的标题,可以被文件头信息中的 slug 覆盖。

slug

由文件的文件名中确定的 Slugified title(除数字和字母之外的字符们会被取代为连字符),可以被文件头信息中的 slug 覆盖。

categories

文章类型。如果一篇文章有多个类型,Jekyll 会创建一个目录(例如,/category1/category2)。Jekyll 也可以自动解析 URLs 中的双斜线 `//`,所以如果当前文章没有设定类型,则忽略该项。

内建永久链接类型

当你能够通过 template variables 来指定一个自定义永久链接时,方便起见,Jekyll 还提供了下列的内建类型。

永久链接类型URL 模板

date

/:categories/:year/:month/:day/:title.html

pretty

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

ordinal

/:categories/:year/:y_day/:title.html

none

/:categories/:title.html

页面(Pages) 和集合(collections)

permalink 配置用来指定博客的永久链接模板。页面和集合同样有它们自己的默认永久链接模板;页面的默认模板是 /:path/:basename,集合的默认模板是 /:collection/:path`。

这些样式被修改用来匹配在文章永久链接设置里的后缀式。例如,含有反斜杠 / 的永久链接模板 pretty 会更新页面的永久链接,使其同样包含一个反斜杠: /:path/:basename/。含有文件扩展名的永久链接模板 date 会更新页面的永久链接,使其同样包含文件扩展名: /:path/:basename:output_ext。这对任意自定义永久链接模板同样适用。

单独页面或集合文件的永久链接总能够在页面或者文件的头信息里重写覆盖。另外,给定的集合的永久链接能在集合配置中自定义设置。

永久链接模板举例

比如文件名: /2009-04-29-slap-chop.textile

URL 模板对应的永久链接 URL

没有配置或 permalink: date

/2009/04/29/slap-chop.html

pretty

/2009/04/29/slap-chop/

/:month-:day-:year/:title.html

/04-29-2009/slap-chop.html

/blog/:year/:month/:day/:title

/blog/2009/04/29/slap-chop/index.html

/:year/:month/:title

具体细节见于 无扩展名链接(Extensionless permalinks)

/2009/04/slap-chop

无扩展名永久链接(Extensionless permalinks)

Jekyll 支持即不包含反斜杠也不包含文件扩展名的永久链接,但这需要网络服务端的额外支持才能正常工作。当使用无扩展名永久链接时,写到硬盘上的输出文件依然会保留正确的文件扩展名(典型的比如,.html),所以网络服务端必须能够 map 那些没有文件扩展名的文件的请求。

无论 GitHub Pages 还是 Jekyll 内置的 WEBrick server 都能够正确处理这些请求,不需要任何额外工作。

Apache

Apache 网络服务端对内容协商(content negotiation)有着非常广泛的支持,而且能够通过在你的 httpd.conf 或者 .htaccess 文件中设置 multiviews 选项来处理无扩展名的 URLs:

Options +MultiViews

Nginx

try_files 指令允许你指定一个文件列表搜索,用来处理请求。如果请求的 URL 的精确匹配未找到的的话,下列配置会让 nginx 搜索含有 .html 扩展名的文件。

try_files $uri $uri.html $uri/ =404;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文