Skip to content

[Bug report] cleanUrls: 客户端访问无后缀 URL 被补成 .html,与托管层 URL 规范化冲突导致无限重定向循环 #3239

Description

@MEMZ-CHROER

Bug report

Description

开启 cleanUrls: true 后,VuePress 生成的 SSR 链接是无后缀的(目录式,如 /tanks/)。但客户端路由对无后缀路径的推断仍会强制补 .html(如访问 /tanks 会被规范成 /tanks.html)。

当站点部署在会自动规范化 URL 的静态托管平台(如 Vercel)时,VuePress 的客户端规范化与托管层的规范化规则互相冲突,形成无限重定向循环

/tanks          ← 用户访问(无后缀)
  ↓ VuePress 客户端:无后缀 → 强制补 .html
/tanks.html
  ↓ 托管层重写:.html → 目录 index
/tanks/
  ↓ 托管层/浏览器:带尾斜杠目录 → 归一为无后缀
/tanks
  ↓ VuePress 客户端:又补 .html
... 无限循环 → ERR_TOO_MANY_REDIRECTS

Steps to reproduce

  1. 配置 cleanUrls: true
  2. 内容用目录式结构:tanks/README.md → 产物 tanks/index.html,路由 /tanks/
  3. 部署到 Vercel(或任何会对无后缀/尾斜杠做 301 规范化的静态托管)
  4. 浏览器访问 /tanks(无后缀)
  5. 观察:客户端把 /tanks 规范成 /tanks.html,托管层再弹回目录形态,陷入循环

注:直接访问 /tanks/(带斜杠)正常。问题仅在无后缀输入时触发——这正是 cleanUrls 期望支持的 URL 形态。

Expected behavior

  • cleanUrls: true 开启时,客户端路由解析应尊重 cleanUrls:无后缀路径不应被强制补 .html(应保持无后缀或原样匹配)。
  • 或者:提供配置项/路由选项,让用户能完全控制 URL 规范化行为,避免与托管平台的规范化规则冲突。

Environment info

  • Browser: Edge
  • vuepress: 2.0.0-rc.26
  • @vuepress/bundler-vite: 2.0.0-rc.26
  • @vuepress/theme-default: 2.0.0-rc.120

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions