解决 React 项目部署到 Apache 空白或只有首页

发布于 2023-04-24 21:25:46 字数 1738 浏览 78 评论 0

错误现象

React 项目搭建好了,本地调试非常满意,开开心心上传到服务器端的 Apache,结果在浏览器一看傻眼了,直接是空白页啥都没有,或者是只有首页显示了出来,其他项目内的页面打不开。

错误原因

React 打包出来的是一个动态网页应用,实际上有且仅有 index.html 这一个 html 文件(一般情况下)。Apache 在解析页面和子域名的时候,默认是去寻找对应名字的文件夹。假设根目录是 /website,主页地址 www.domain.com,子域名 www.domain.com/page1,则访问子域名时,Apache 会寻找 /website/page1 并进入入口文件。但问题是在 React 应用里,根本就没有 /website/page1 这个文件夹,所以页面无法正常打开。

解决方法

正确的访问方法是,把 www.domain.com/page1 的请求先指向主页,然后让 React 生成的 js 帮助我们解析地址,并生成正确的页面元素。所以实际上无论是什么 url 地址,所有的页面都是在 index.html 上渲染出来的。

具体操作如下:

1、在 Apache 工作的根目录新建配置文件 .htaccess

2、写入配置

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

这段配置的意义是开启重定向功能,并将所有页面重定向到根目录的 index.html

3、可能是多余的设置,没有做过测试,但是这样做可以解决另一个玄学的问题,在项目的 package.json 文件中添加一项

{
   "homepage": "/"
   // 或者 "homepage": ".",但这个不能解决那个玄学的问题,上面的可以
   // 额外提醒:package.json 中不能写注释
}

 

其他注意

  1. Apache 没有显示应该首先检查 Apache 配置,例如是否设置了正确的根目录等等
  2. 考虑到 /public 内的文件会原封不动地复制到 /build 里,可以把 .htaccess 放在 /public 里,这样每次打包的时候就会自动出现在 /build 中,一般也正好 Apache 工作的根目录
  3. 如果修改了 package.json,记得重新打包一次项目

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

轮廓§

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文