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

react-router-dom移动端刷新或直接访问子路径返回404错误如何解决

问题根因

这是React单页应用客户端路由的典型现象:你当前用的react-router-dom默认是BrowserHistory模式,路由切换逻辑完全在浏览器端执行,只有首次访问首页时才会请求服务端的index.html文件。当你直接访问子路径、或者在子路径页面刷新时,浏览器会直接把当前子路径发给服务端请求资源,但你的服务端没有配置对应子路径的返回规则,就会返回404错误。而从首页点击菜单切换是走的客户端路由,没有触发服务端请求,所以不会报错。

修复方案

方案1:配置服务端 fallback(推荐,URL格式更美观)

只需要让服务端收到任意路径的请求时,都返回你React应用的index.html文件,后续路由匹配逻辑会由客户端自动处理,不会影响页面功能。不同服务端的配置示例如下:

  • Nginx 配置
    修改站点的Nginx配置文件,调整location规则:
server {
  listen 80;
  server_name kafalovgroup.bg;
  # 替换成你项目打包后dist文件夹的存放路径
  root /usr/share/nginx/react-project; 

  location / {
    # 核心规则:找不到对应资源就返回index.html
    try_files $uri $uri/ /index.html; 
    index index.html index.htm;
  }
}

修改完成后执行nginx -s reload重启Nginx即可生效。

  • Apache 配置
    在项目打包后的根目录新建.htaccess文件,写入以下内容:
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

需要提前开启Apache的rewrite模块。

  • 静态托管平台配置
    如果用的是云服务商的静态网站托管服务,直接在平台配置面板里把404错误页指向你的index.html文件即可。

方案2:改用HashRouter(无需改服务端配置,快速修复)

如果暂时没有服务端修改权限,可以直接替换路由模式为HashRouter,该模式下路由会携带#前缀(例如http://kafalovgroup.bg/#/contacts),所有路由逻辑都在hash段处理,不会发到服务端,自然不会出现404问题。
修改代码如下:

  1. 修改react-router-dom的引入语句:
// 原来的引入
// import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
// 替换为
import { HashRouter as Router, Switch, Route, Link } from 'react-router-dom';
  1. 其他原有代码不需要任何改动,重新打包部署即可生效。

额外代码优化提示

你现有的Route写法存在冗余:同时定义了component属性和子组件,两种写法二选一即可,避免不必要的重复渲染:

// 写法1:只用component属性
<Route exact path="/services" component={Services} />
// 写法2:只用子组件
<Route exact path="/services">
  <Services />
</Route>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:15:09