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

Nginx部署带React Router的React应用出现子路由重复如何解决

路由重复问题解决方案

问题根因

该错误是React Router未适配子路径部署规则导致的:你将应用部署在域名的/app/patients二级路径下,但现有配置既没有指定React Router的基础路径,跳转逻辑也存在路径拼接错误,最终触发路径重复。

修复步骤

1. 配置React Router的basename参数

你使用的是React Router v6版本,在根路由的BrowserRouter组件上添加basename属性,值为你的实际部署子路径,原有路由配置不需要修改:

<BrowserRouter basename="/app/patients">
  <Routes>
    <Route path="/" element={<Patients />} />
    <Route path="/add" element={<AddPatient />} />
    <Route path="/:patientId" element={<Patient />} />
    <Route path="/:patientId/update" element={<UpdatePatient />} />
    <Route path="/:patientId/wounds/add" element={<AddWound />} />
    <Route path="/:patientId/wounds/:woundId/update" element={<UpdateWound />} />
    <Route path="*" element={<Navigate to="/" />} />
  </Routes>
</BrowserRouter>

配置完成后,所有以/开头的路由路径都会自动拼接/app/patients作为前缀,不需要手动拼接。

2. 修正路由跳转逻辑

所有Link组件、useNavigate调用的跳转路径,直接写相对于basename的根路径即可,禁止手动添加/app/patients前缀:

// 正确写法,会自动生成 /app/patients/605db06b642296fa97b7c4c0
<Link to={`/${patientId}`}>查看患者</Link>

// 错误写法,会导致路径重复
<Link to={`/app/patients/${patientId}`}>查看患者</Link>

3. 适配Nginx和打包配置

修改Nginx配置适配子路径部署:

server {
  listen       80;
  location /app/patients {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /app/patients/index.html =404;
  }
}

修改package.json的homepage字段:

确保打包生成的静态资源路径正确:

{
  "homepage": "/app/patients/"
}

验证

重新打包Docker镜像部署后,路由生成逻辑就会恢复正常,不会出现路径重复问题。

内容的提问来源于stack exchange,提问作者Jan-Philipp Heinrich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:54:04