You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在GitHub Pages的Vue网站刷新时出现404问题排查

问题原因与解决方案

你遇到的刷新404问题,核心是Vue Router的history模式和GitHub Pages的静态托管机制不兼容。

当你开启mode: 'history'时,Vue Router会把URL处理成/posts这类看起来像真实服务器路径的格式,但GitHub Pages是纯静态文件服务器——它只会响应实际存在的文件请求。比如你刷新/posts时,服务器会去寻找/posts这个文件或目录,而你的项目里只有index.html这一个入口文件,服务器找不到对应资源,自然就返回404了。

而平时从首页点击导航跳转时,是Vue Router在前端直接处理路由切换,不会向服务器发请求,所以不会出问题。


解决步骤

要让GitHub Pages支持history模式的路由刷新,关键是让服务器在遇到不存在的路径时,仍然加载你的Vue应用入口(index.html),再让Vue Router接管路由处理。具体操作如下:

1. 创建自定义404.html文件

在项目的public目录(或根目录,取决于你的Vue版本)新建一个404.html,内容和index.html完全一致。构建后这个文件会被同步到docs目录(对应你的build配置)。

GitHub Pages有个特性:当请求的路径不存在时,会自动加载404.html。这样刷新时服务器返回的404.html和index.html一样,能正常加载你的Vue应用。

2. 添加路由修复脚本

在index.html和404.html的<head>标签里,加入一段处理URL的脚本:

<script>
  (function() {
    const path = window.location.pathname;
    // 排除静态资源路径,只处理路由路径
    if (path !== '/' && !path.startsWith('/static/')) {
      // 把当前路径转成hash格式,让Vue Router能识别
      window.history.replaceState(null, null, '/#' + path);
      // 刷新页面让Vue应用加载对应路由
      window.location.reload();
    }
  })();
</script>

这段脚本会在页面加载时,把非根路径的URL转成hash格式(比如/posts变成/#/posts),Vue Router就能正确解析并渲染对应的组件了。

3. 验证路由配置(可选)

你的现有路由配置没问题,但可以明确指定base参数确保兼容性:

export default new Router({
  mode: 'history',
  base: '/', // 个人站点根路径,默认就是'/'
  routes: [
    { path: '/', name: 'Home', component: Home },
    { path: '/work', name: 'Work', component: Work },
    { path: '/posts', name: 'Posts', component: Posts },
    { path: '*', component: Home }
  ]
})

4. 重新构建部署

运行npm run build重新构建项目,再把docs目录的内容推送到christopherkade.github.io的master分支即可。


内容的提问来源于stack exchange,提问作者Christopher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:31:16