如何将Jekyll中的page.url改为输出文件的实际路径?
解决Jekyll中page.url与实际输出文件路径不一致的问题
问题原因
Jekyll 默认的 page.url 返回的是逻辑URL路径(遵循pretty permalink模式,这是Jekyll默认的链接格式),它会自动去掉.html后缀,生成更简洁的URL(比如/cookies),但实际生成的静态文件依然是带.html后缀的(/cookies.html)。这是Jekyll为了支持“优雅URL”的设计——服务器通常会自动将/cookies这类请求指向对应的cookies.html文件,但你的canonical链接需要指向实际存在的文件路径,所以会出现不一致的情况。
快速修复方案
修改_includes/head.html中的canonical链接代码,在非目录页的URL后手动补全.html后缀,同时保留原来处理index.html的逻辑:
{% assign canonical_url = page.url | replace:'index.html','' %} {% unless canonical_url == '/' or canonical_url ends with '/' %} {% assign canonical_url = canonical_url | append: '.html' %} {% endunless %} <link rel="canonical" href="{{ canonical_url | prepend: site.baseurl | prepend: site.url }}"/>
说明
- 先通过
replace:'index.html',''处理index页面的URL(比如把/posts/index.html转为/posts/) - 用
unless判断:如果URL是根路径/,或者是目录路径(以/结尾),就不添加.html;否则给URL加上.html后缀 - 最后拼接site.url和site.baseurl得到完整的canonical链接
这样修改后,/cookies.md对应的canonical链接会变成你的域名/cookies.html,和实际输出文件路径一致,同时不影响index页面和目录页面的链接格式。
内容的提问来源于stack exchange,提问作者jcubic
相关产品推荐
相关产品推荐

