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
- 配置
cleanUrls: true
- 内容用目录式结构:
tanks/README.md → 产物 tanks/index.html,路由 /tanks/
- 部署到 Vercel(或任何会对无后缀/尾斜杠做 301 规范化的静态托管)
- 浏览器访问
/tanks(无后缀)
- 观察:客户端把
/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
Bug report
Description
开启
cleanUrls: true后,VuePress 生成的 SSR 链接是无后缀的(目录式,如/tanks/)。但客户端路由对无后缀路径的推断仍会强制补.html(如访问/tanks会被规范成/tanks.html)。当站点部署在会自动规范化 URL 的静态托管平台(如 Vercel)时,VuePress 的客户端规范化与托管层的规范化规则互相冲突,形成无限重定向循环:
Steps to reproduce
cleanUrls: truetanks/README.md→ 产物tanks/index.html,路由/tanks//tanks(无后缀)/tanks规范成/tanks.html,托管层再弹回目录形态,陷入循环Expected behavior
cleanUrls: true开启时,客户端路由解析应尊重 cleanUrls:无后缀路径不应被强制补.html(应保持无后缀或原样匹配)。Environment info
vuepress: 2.0.0-rc.26@vuepress/bundler-vite: 2.0.0-rc.26@vuepress/theme-default: 2.0.0-rc.120