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

使用react-router-dom的React项目打包部署后页面空白问题求助

React Router部署到Apache后页面空白的解决方案

问题原因

使用BrowserRouter时依赖HTML5 History API,Apache服务器默认会把/hello这类路由请求当作静态文件路径查找,找不到就返回404,导致React无法加载对应路由组件,最终页面仅能显示index.html里的标题和图标,主体内容空白。另外如果打包时资源路径配置错误,也会引发静态资源加载失败导致空白。

解决方案

1. 修正打包资源路径

如果项目不是部署在域名根目录(比如部署在http://your-domain.com/react-app),在项目根目录的package.json中添加homepage字段指定部署路径:

{
  "homepage": "/react-app/"
}

若部署在根目录,直接设置为:

{
  "homepage": "/"
}

添加后重新执行npm run build打包。

2. 配置Apache重写规则

在项目的public目录下创建.htaccess文件,添加以下规则,让所有路由请求都转发到index.html:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]

如果项目部署在子目录,修改RewriteBase为对应子路径,比如:

RewriteBase /react-app/

将打包后的build目录内容上传到Apache对应目录后,确保服务器已启用mod_rewrite模块。

3. 改用HashRouter(无需服务器配置)

不想修改服务器配置的话,可将BrowserRouter替换为HashRouter,它会在路由路径前添加#,服务器不会解析#后的内容,避免404问题。修改路由代码:

import { HashRouter, Routes as Switch, Route } from "react-router-dom";
import Home from "./pages/Home";
import Hello from "./pages/Hello";

function Routes() {
    return (
        <HashRouter>
            <Switch>
                <Route path='/' element={<Home />} />
                <Route path='/hello' element={<Hello />} />
            </Switch>
        </HashRouter>
    )
}

export default Routes;

修改后重新打包部署即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:15:45