标签不影响 vue router 路由导航,因其完全不读取 document.baseuri;必须显式配置 createrouter({ base: '/subapp/' }),否则 router.push('/home') 会跳至根路径而非 /subapp/home。

<base> 标签对动态路由路径**没有规范作用**,它完全不参与前端路由的解析、匹配或导航逻辑。
为什么 <base href="/subapp/"> 不会让 Vue Router 自动跳到 /subapp/home
Vue Router(v4+)、React Router v6+ 等现代前端路由库**根本不读取 document.baseURI 或 <base> 标签**。它们的路由行为只取决于你传入的 base 或 basename 配置项。
- 没配
createRouter({ base: '/subapp/' })→router.push('/home')会跳到https://example.com/home,不是/subapp/home - 写了
<base href="/subapp/">但漏配路由 base → 页面刷新时资源(JS/CSS)能加载,但点击 Link 却跳错、useNavigate导航失效 - 浏览器控制台不会报错,只会静默错位——这是最危险的
<base> 实际影响哪些路径?
它只在 HTML 解析阶段生效,且仅重写以下硬编码的纯相对路径(即不以 /、:、协议开头):
-
<img src="logo.png">→ 拼成/subapp/logo.png -
<script src="main.js"></script>→ 拼成/subapp/main.js -
<link href="style.css">→ 拼成/subapp/style.css -
<form action="login.php"></form>→ 提交到/subapp/login.php - CSS 中
background: url(avatar.jpg)→ 解析为/subapp/avatar.jpg
以下**完全不受控**:fetch('./api')、import('./utils')、new URL('data.json', import.meta.url)、@import "reset.css"、<iframe src="/admin/frame.html"></iframe>。
部署子路径 SPA 时,<base> 和构建配置重复拼接的典型 404
当 Vite 的 build.base = "/subapp/" 和 HTML 中的 <base href="/subapp/"> 同时存在,且资源引用是相对路径(如 src="index.js"),浏览器会先按 <base> 拼出 /subapp/index.js,而构建工具又把该文件输出到 /subapp/subapp/index.js —— 最终请求 /subapp//subapp/index.js(双斜杠),返回 404。
- 更稳妥的做法:只用构建工具统一控制前缀(如 Vite 设
build.base = "/subapp/"),HTML 中**不写**<base> - 若必须用
<base>(例如多环境 CDN 资源托管),则构建工具要设build.base = "",避免叠加 - Webpack 同理:publicPath 设为空字符串,让
<base>成为唯一路径源
真正容易被忽略的是:Service Worker 的预缓存清单、import.meta.env.BASE_URL、甚至 new URL('config.json', document.baseURI) 这类手动构造逻辑,都依赖同一个前缀口径——错一个环节,离线资源就加载失败。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











