会劫持所有相对 URL 跳转,如 变为 /subapp/page.html;仅 / 开头或带协议的 URL 不受影响;其值必须以 / 结尾才生效,否则标签被静默丢弃。

base href 会劫持所有相对 href 的跳转行为
只要写了 ,所有没写协议、没写根路径的 就会跳到 /subapp/page.html,而不是当前页面所在目录下的 page.html。这包括普通链接、表单提交(method="get" 时)、 等所有 HTML 解析阶段的相对 URL 跳转。
常见翻车点:
-
→ 实际跳转/subapp/user/profile(不是当前页同级的user/profile) -
这种编码过的相对路径仍被 base 劫持,浏览器不校验语义,只看是否以/、http://等开头 -
变成/subapp/#,触发完整页面重载,滚动重置,锚点失效
base 不影响以 / 开头或带协议的 href
和 完全绕过 控制——它们走的是绝对路径解析逻辑,和 document.baseURI 无关。
但要注意边界情况:
前端路由跳转(router.push)和 base 标签完全无关
router.push('/home') 的目标地址由路由库的 base 配置决定,比如 Vue Router 的 createWebHistory('/subapp/') 或 React Router 的 。它根本不会读 document.baseURI,也不会拼接 的值。
后果很直接:
- HTML 里写了
,但 Vue Router 没配base: '/subapp/'→ 点击 Link 跳到/home,不是/subapp/home - React Router v6+ 的
生成的 URL 完全取决于basename,和 base 标签字符串是否一致毫无关系 - 两者值不一致时,页面可能白屏(路由没匹配上),或者资源加载路径对、跳转路径错,行为割裂
多级子路径下 href 值必须结尾带斜杠
是无效写法,浏览器静默丢弃整条标签——控制台无提示,但所有 src="logo.png" 全部回退到当前页 URL 解析,上线即 404。
真正生效的只有:
-
(根相对路径,结尾斜杠不可省) -
(绝对 URL,协议+域名+路径全明确)
Firefox 和 Opera 对缺斜杠尤其敏感:background: url(icon.png) 在 CSS 中会被拼成 /a/b/cicon.png(中间斜杠被吃掉),Chrome 虽然容忍,但跨浏览器一致性必须靠结尾斜杠兜底。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











