You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/(如果服务器配置了默认索引页)都能正常打开。

如果你不想全局修改,只想针对某个嵌套目录的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:37:37