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

React Router 6在GitHub Pages嵌套路由404,求无#解决方案

React Router 6部署GitHub Pages路由问题解决方案

为什么直接访问嵌套路由会404?

GitHub Pages是静态文件托管服务,当你直接访问https://amir248.github.io/site-amir/location这类嵌套路由时,服务器会尝试在项目根目录下寻找名为location的文件或文件夹,但你的React项目是单页应用(SPA),所有路由逻辑都在客户端浏览器处理,服务器上根本不存在这个资源,所以直接返回404错误。

而HashRouter的工作逻辑是把路由信息放在URL的#后面,比如https://amir248.github.io/site-amir/#/location——浏览器会将#后的内容视为锚点,不会发送给服务器,服务器只会返回根目录的index.html,之后React Router在客户端解析#后的路径,就能正确渲染对应组件,因此不会出现404。

无#符号的替代方案(适配BrowserRouter)

如果不想用HashRouter的#链接,可以通过以下两步配置实现BrowserRouter的正常工作:

1. 配置React Router的basename

在Router初始化时,设置basename为你的GitHub Pages项目名称(即/site-amir),确保路由路径与项目部署路径匹配:

import { BrowserRouter, Routes, Route } from 'react-router-dom';

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <BrowserRouter basename="/site-amir">
      <App />
    </BrowserRouter>
  </React.StrictMode>
);

同时修改组件内的Link路径,无需手动拼接项目名称,直接写相对路由即可:

// 原写法
<Link to={`/site-amir/`}>home</Link>
// 修改后
<Link to="/">home</Link>

2. 添加404重定向文件

在项目的public目录下创建404.html文件,内容完全复制index.html的内容。当GitHub Pages找不到对应资源时,会返回这个404.html,此时React Router就能在客户端接管页面,解析正确的路由路径。

另外要确保package.json中配置了正确的homepage字段:

{
  "homepage": "https://amir248.github.io/site-amir/"
}

完成以上配置后,重新打包并部署到GitHub Pages,就能直接访问嵌套路由而不出现404,且URL中不会带有#符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:26:59