项目站点(username.github.io/repo)根路径为/repo/,故绝对路径/css/style.css被解析为username.github.io/css/style.css而404;需用base href="/repo/"或构建工具配置base为/repo/。

GitHub Pages 项目站点(username.github.io/repo)下,用 /css/style.css 这类绝对路径会 404,必须改用相对路径或动态 base 路径。
为什么 /css/style.css 在项目站点里加载失败
GitHub Pages 用户站点(username.github.io)根路径是 /,所以 /css/style.css 解析为 https://username.github.io/css/style.css,能命中;但项目站点(username.github.io/repo)实际根路径是 /repo/,此时 /css/style.css 仍试图从 / 下找,结果就是 https://username.github.io/css/style.css —— 显然不存在。
浏览器不会自动把请求“降级”到当前子路径,它严格按 URL 字面解析。
- 用户站点:发布源为
main分支根目录 → 网站根路径 =/ - 项目站点:发布源为
main分支的docs目录 或gh-pages分支 → 网站根路径 =/repo/ - 所有以
/开头的资源路径(href="/css/style.css"、src="/js/app.js")都按网站根路径解析,不随当前 HTML 文件位置变化
<base href> 是最轻量的修复方式
在 index.html 的 中添加一行:<base href="/repo/">(把 repo 换成你仓库名)。之后所有相对路径都会自动补上前缀,css/style.css 就变成 https://username.github.io/repo/css/style.css,正确命中。
注意:<base> 会影响整个页面所有相对 URL(包括链接、图片、表单 action),所以只适合纯静态展示页;如果页面有跳转逻辑,确保所有内部链接也用相对路径写。
- 必须放在
内,且在任何<link>、<script></script>之前 - 不能写成
<base href="./">——.不会被 GitHub Pages 解析为当前子路径,它还是按服务器根处理 - 如果用了自定义域名(如
yoursite.com),<base href>值仍应填/repo/,不是https://yoursite.com/repo/—— 协议和域名由浏览器自动补全
Vite / Vue / React 项目必须配 base 参数
构建工具生成的 HTML 通常依赖 base 控制资源前缀。例如 Vite 项目,vite.config.ts 中的 base 必须设为 /repo/(不是 /),否则打包出的 index.html 里所有 assets/ 引用仍是 /assets/xxx.js,必然 404。
- Vue CLI 项目:修改
vue.config.js的publicPath: '/repo/' - Next.js 项目:设置
assetPrefix: '/repo/'(仅适用于next export静态导出场景) - 手动写 HTML?直接删掉所有
/开头的路径,改用./css/style.css或css/style.css
CNAME 文件存在时,<base href> 仍要按 GitHub Pages 路径写
即使你绑了 yoursite.com 并在仓库根放了 CNAME 文件,GitHub Pages 后端仍以 /repo/ 为逻辑根路径提供服务。浏览器看到的是你域名,但服务器路由没变 —— 所以 <base href="/repo/"> 依然有效,且必须保持这个值。
常见误操作:以为绑了域名就能当用户站点用,于是把 base 设成 /,结果自定义域名下资源全部 404。这不是 DNS 或 CNAME 的问题,是路径配置没对齐。
真正容易被忽略的点是:GitHub Pages 的路径语义和你看到的域名完全解耦。无论访问 username.github.io/repo 还是 yoursite.com/repo,底层路径结构一模一样 —— 只看仓库名,不看域名。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











