标签仅影响纯相对路径(如 logo.png),对根相对路径(/logo.png)、绝对路径等完全无效;必须以 /admin/ 结尾,否则 firefox/opera 拼接出错;与构建工具 publicpath 混用会导致双斜杠 404。

href="/admin" 这种写法根本不受 base 控制
很多人以为 <base href="/admin"> 能让所有相对路径都落到 /admin/ 下,但其实以 / 开头的路径(即根相对路径)完全绕过 <base>。比如 <img src="/logo.png"> 会直接请求 https://example.com/logo.png,而不是 /admin/logo.png。这种行为是浏览器规范强制的,<base> 只改写“纯相对路径”(如 logo.png、js/app.js),对以 /、http://、https://、// 开头的路径一概无视。
href="/admin/" 结尾斜杠缺不得
写成 <base href="/admin">(无结尾斜杠)在 Firefox 和 Opera 中会被截断为 /admincss/ 或 /adminjs/ —— 因为浏览器把后续的 css/app.css 拼到了 /admin 后面,变成 /admincss/app.css。必须写成 <base href="/admin/"> 才能确保 logo.png 正确解析为 /admin/logo.png。Chrome 虽然容忍性稍强,但跨浏览器一致性要求你严格补上结尾斜杠。
根相对路径和 base 标签共存时行为割裂
一个页面里同时存在根相对路径和纯相对路径,就会出现资源加载和跳转逻辑不一致的问题:
-
<img src="icon.png">→ 加载/admin/icon.png(受<base>控制) -
<a href="/dashboard"></a>→ 跳转到https://example.com/dashboard(完全绕过<base>) -
<script src="/js/app.js"></script>→ 加载https://example.com/js/app.js(同样绕过)
这种割裂在 SPA 部署到子路径时尤其危险:资源能加载,但路由跳转或表单提交却跑到了根域下,用户点击没反应、提交 404,排查时容易误判为后端问题。
构建工具 publicPath/base 和手写 base 标签重复导致双斜杠
Vite 的 build.base 或 Webpack 的 publicPath 如果设为 /admin/,再在 HTML 里手动加 <base href="/admin/">,就可能触发双重拼接。例如 Vite 构建出的 script 路径本已是 /admin/js/app.js,HTML 解析时又按 <base> 再拼一次,最终请求变成 /admin//admin/js/app.js —— 404。这种情况在本地开发常被忽略,上线后才暴露。正确做法是:选其一,别混用;若用构建工具统一控制,HTML 中就不该再写 <base>。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











