Eleventy生成嵌套index.md的index文件时未添加.html后缀问题排查
解决Eleventy嵌套目录index.md无.html后缀的问题
这个问题是Eleventy默认的**干净URL(Clean URLs)**逻辑导致的,我来帮你拆解原因和解决方案:
为什么会出现这个差异?
Eleventy默认对HTML类模板(包括Markdown转译后的文件)启用了cleanUrls: "auto"的行为:
- 根目录的
index.md会正常生成index.html(这是站点根目录的特殊处理,保证首页能被服务器正确识别) - 嵌套目录(比如
post/my-cool-post/)里的index.md,会被生成无.html后缀的index文件,对应Eleventy推崇的“干净URL”访问方式(比如http://xxx/post/my-cool-post/)
但很多服务器默认不会把无后缀的index文件当作默认索引页,所以直接访问目录会返回404,手动加.html后缀能正常访问。
解决方案
根据你的需求,有几种可行的方式:
1. 全局禁用干净URL(推荐)
直接在.eleventy.js的返回配置里添加cleanUrls: false,这样所有生成的HTML文件都会保留.html后缀,包括嵌套目录的index.md:
module.exports = function (eleventyConfig) { // 你的现有配置代码... return { jsDataFileSuffix: ".11ty", dataTemplateEngine: "njk", htmlTemplateEngine: "njk", markdownTemplateEngine: "njk", passthroughFileCopy: true, cleanUrls: false, // 新增这一行,禁用干净URL dir: { input: "src", data: "_data", includes: "_includes", layouts: "_layouts", output: "public" } } }
重新执行npx eleventy后,嵌套目录里就会生成index.html,访问http://xxx/post/my-cool-post/index.html或者http://xxx/post/my-cool-post/(如果服务器配置了默认索引页)都能正常打开。
2. 单个文件强制设置permalink
如果你不想全局修改,只想针对某个嵌套目录的index.md处理,可以在该文件的Front Matter里手动指定permalink:
--- permalink: /post/my-cool-post/index.html ---
这样这个文件会强制生成带.html后缀的输出文件,其他文件不受影响。
3. 配置服务器识别无后缀index文件
如果想保留Eleventy的干净URL风格,也可以修改服务器配置,让它把无后缀的index文件当作默认索引页:
- Apache:在
.htaccess里添加DirectoryIndex index index.html - Nginx:在server配置里设置
index index index.html;
这种方式不需要修改Eleventy配置,但需要服务器权限来调整配置。
内容的提问来源于stack exchange,提问作者ra9r
相关产品推荐
相关产品推荐

