标签仅重置html中相对url的解析起点,必须为绝对url或以/开头的根相对路径(结尾带斜杠),且须置于最顶部唯一存在;它只影响src、href等属性中的纯相对路径,不影响fetch、import等js运行时路径。

<base> 标签不能“设置网站根目录”,它只重置当前页面中相对 URL 的解析起点——这个起点必须是绝对 URL 或以 / 开头的根相对路径,否则浏览器直接静默忽略。
base href 必须是绝对 URL 或根相对路径(以 / 开头且结尾带斜杠)
浏览器只认 href 值以 http://、https://、// 或 / 开头的写法。其他形式(比如 static/、../assets、%PUBLIC_URL%/)全被丢弃,不报错也不警告,但所有 src="logo.png" 会继续按当前页面 URL 拼接,上线后大概率 404。
-
✅ 安全写法:
<base href="https://cdn.example.com/v4/">(绝对 URL,部署可控) -
✅ 合法写法:
<base href="/myapp/">(根相对路径,结尾斜杠不能省,否则 Firefox 会截断成/myappcss/) -
✅ 可用写法:
<base href="//cdn.example.com/v4/">(协议相对,自动继承当前协议) -
❌ 无效写法:
<base href="assets/">、<base href="../static/">、<base href="/myapp">(缺结尾斜杠)、<base href="%24%7BASSET_BASE%7D">(未服务端替换就发到浏览器)
base 标签必须放在 最顶部,且只能有一个
<base> 的作用是影响 HTML 解析器对后续所有相对 URL 的初始拼接逻辑,所以它必须是 中第一个元数据类标签。放错位置或重复声明,会导致部分资源(比如提前写的 <link href="style.css">)完全不受控。
- 正确顺序:
<base href="/myapp/"> <title>...</title> <link href="main.css"> <script src="app.js"></script> - 错误顺序:
<link href="main.css"> <base href="/myapp/">→main.css已按原页面 URL 解析完毕,<base>对它无效 - 禁止写在
里 —— 浏览器直接忽略,无提示 - 两个
<base>:只有第一个生效,Chrome 控制台会提示Multiple base elements detected. Only the first one is used.
哪些路径受 base 影响,哪些完全不受
<base> 只在 HTML 解析阶段起作用,它改写的是 src、href、action 等属性中**纯相对路径**(如 "logo.png"、"js/app.js")的初始拼接逻辑,不是运行时重写。
-
✅ 明确受影响:
<img src="avatar.jpg">、<script src="main.js"></script>、<link href="theme.css">、<a href="about.html"></a>、CSS 中的background: url(cover.jpg) -
❌ 完全不受影响:
fetch('./api/user')、import('./utils.js')、new Worker('./worker.js')、CSS@import "reset.css"、<iframe src="page.html"></iframe> -
⚠️ 半受影响:
document.baseURI会返回<base href>的值,可用于构造 URL(如new URL('data.json', document.baseURI)),但window.location和document.URL完全不变
单页应用(SPA)部署在子路径时,base 和路由必须协同
Vue Router 的 createWebHistory('/myapp/') 和 HTML 的 <base href="/myapp/"> 是两套独立机制,不自动同步。只配一个,另一个必出问题。
-
<base href="/myapp/">是为了让<script src="chunk.js"></script>正确加载,否则 chunk 404 -
createWebHistory('/myapp/')是为了让router.push('/home')跳转到/myapp/home,而不是根路径/home - 微前端场景下,若子应用同时设了 Webpack 的
publicPath和<base href="/subpath/">,资源路径可能被拼两次,变成/subpath/subpath/js/app.js - 构建工具(如 Vite、Webpack)通常比硬塞
<base>更可靠;优先用base配置项生成正确路径,而非依赖 HTML 标签
最容易被忽略的是:base 不是“项目根目录”开关,它不改变 JS 运行时行为,也不影响 fetch/import/@import;它的生效范围极窄,但一旦写错,后果是静默 404,查起来特别费时间。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











