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

React-Router-Dom动态路由参数引发404错误求助

解决 React Router 动态路由访问 404 的问题

我来帮你排查这个动态路由返回404的问题,常见的原因和对应解决办法整理如下:

1. 服务器配置问题(生产环境最常见)

你用的是BrowserRouter,它依赖HTML5的History API。当你部署到静态服务器(比如Nginx、Apache,或者Netlify/Vercel这类平台),直接访问/edit/123这种动态路由时,服务器会尝试寻找对应路径的物理文件——但React的路由是客户端路由,服务器根本不知道这个路径对应的资源,所以会返回404。

针对不同服务器的解决配置:

  • Nginx:在站点配置文件中添加try_files规则,让所有请求都指向项目的index.html
    location / {
      try_files $uri $uri/ /index.html;
    }
    
  • Apache:在项目根目录创建.htaccess文件,写入以下内容
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
    
  • Netlify:在根目录创建_redirects文件,内容如下
    /*    /index.html   200
    
  • Vercel:在根目录创建vercel.json文件,内容如下
    {
      "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
    }
    

2. 代码层面的细节检查

从你贴的代码片段来看,有几个需要确认的点:

  • 确保Switch标签是完整闭合的——你代码里写的是</Switch...,这会导致路由渲染异常,必须写成</Switch>
  • 可以用更简洁的方式获取路由参数:函数组件推荐使用useParams钩子替代props.match.params,代码更清晰:
    import { useParams } from 'react-router-dom'
    const EditExpensePage = () => {
      const { id } = useParams()
      return ( <div> <p>EditExpense Page with id of {id}</p> </div> )
    }
    
  • 检查是否有其他路由的路径和/edit/:id冲突——从你的代码看,前面的路由都是明确的固定路径,应该不会有覆盖问题。

3. 开发环境临时解决方案

如果你是在本地用create-react-app开发,刷新动态路由出现404,可以临时用HashRouter替代BrowserRouter(不推荐生产环境使用,因为URL会多一个#):

import { HashRouter, Switch, Route } from 'react-router-dom'

const AppRouter = () => (
 <HashRouter>
 <div>
 <Header/>
 <Switch>
 <Route path="/" component={DashboardPage} exact={true}/>
 <Route path="/create/" component={AddExpensePage}/>
 <Route path="/edit/:id" component={EditExpensePage}/>
 <Route path="/help" component={HelpPage}/>
 <Route component={NotFoundPage}/>
 </Switch>
 </div>
 </HashRouter>
)

先按上面的步骤排查,大概率是服务器配置的问题,尤其是部署到线上的场景。如果是本地开发,先检查代码里的Switch闭合情况和参数获取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:50