Jekyll设置permalink:none后URL仍带日期路径如何解决
问题根源
配置不生效基本是以下几个原因,按概率从高到低排:
- 修改
_config.yml后没有重启Jekyll服务。jekyll serve的热更新只会监听内容文件、模板文件的改动,全局配置文件的修改必须完全重启进程才会加载,不重启的话永远用的是旧配置,自然会沿用默认带年月日层级的permalink规则。 - 配置里用了错误的占位符。很多人会误写单数的
:category,Jekyll原生识别的分类占位符是复数形式:categories,占位符写错不识别的话,会直接 fallback 到默认的日期路径规则。 - 单篇文章的Front Matter里写了独立的permalink配置,优先级高于全局配置,覆盖了你写的规则。
- 所用的主题内置了硬编码的permalink规则,优先级高于用户自定义的全局配置。
修正步骤
- 终止当前运行的Jekyll进程,执行命令清空旧的生成缓存和静态文件:
jekyll clean
- 打开
_config.yml,删掉之前试的所有冗余permalink配置,直接写入明确的自定义规则即可,不需要用none之类的预设:
permalink: /blog/:title/
配置末尾加斜杠是Jekyll推荐的写法,生成的路径会是
/blog/文章标题/index.html形式,访问时不需要带.html后缀,完全匹配你要的URL样式。如果你后续需要给文章加其他分类,也可以写成permalink: /:categories/:title/,只要给文章设置category: blog就能达到同样效果。
- 打开
_posts目录下的所有文章,检查文件开头被---包裹的Front Matter配置块,删掉所有单独声明的permalink字段,避免单篇配置覆盖全局规则。 - 如果你用了第三方主题,找到主题的配置文件,搜索
permalink字段,删掉主题内置的硬编码路径规则。 - 重新启动Jekyll服务生成静态文件:
jekyll serve
操作完后访问文章链接,就不会再出现自动拼接年月日路径的问题。
特殊情况排查
如果以上操作做完还是不生效,先检查Jekyll版本:3.0以下的旧版本对permalink预设的支持和新版不一致,直接写自定义路径字符串、不要用none/date之类的预设值即可。另外如果安装了分页、路径重写类的插件,检查插件配置里有没有强制修改文章路径的规则,关闭对应配置即可。
内容的提问来源于stack exchange,提问作者23 Aaron
相关产品推荐
相关产品推荐

