React 静态网站将除主页外的每个页面重定向到 404

Posted

技术标签:

【中文标题】React 静态网站将除主页外的每个页面重定向到 404【英文标题】:React static website redirect every page to 404 besides homepage 【发布时间】:2019-01-29 20:39:50 【问题描述】:

我将我的第一个 react 应用发布到我的共享主机。

它是一个多页面的react应用,在我成功构建项目后,我做了Yarn Build,它做了一个构建文件夹

我将构建的文件夹上传到我的主机,但由于某种原因,我的主机只显示主页而没有其他页面(其他页面在 localhost 中工作)

这是我网站的链接:http://spaceyfi.com/ 这是我的 github 仓库的链接 https://github.com/irohitb/portfolio-

在 repo 中,路由,I have a path named printing

 <Route exact path="/printing" component=Printing />'

但是当我转到spaceyfi.com/printing 时,它并没有打开。

[更新:] 这是我的构建文件夹,其中仅包含一个 html 文件(如果相关) https://github.com/irohitb/portfolio-/tree/master/build

[问题:]我该如何解决?

【问题讨论】:

我对 React 还是很陌生,所以我只是在做一个观察,但是您正在用小写导出组件并用大写 export default printingcomponent=Printing 调用它们 - 不确定这是否导致找不到页面? @MikeDiglio 即使我也是新人,但仍然在 JS 中(可能)如果你使用 export default 那么你可以用你想要的任何名称导入它,即我什至可以使用类似 component= Ptg 直到并且除非我使用该名称导入它,即import Ptg from './container/Printing/printing.js' 【参考方案1】:

您有一个带有index.html 的静态网站。您希望 react-router 为您处理所有请求和导航。

现在,当您点击spaceyfi.com/printing 时,Apache 服务器会在目录中搜索目录printingindex.html。没有找到,它的响应是 404 not found。

在 webpack 开发模式下,开发服务器配置具有用于该目的的 historyApiFallback:

  devServer: 
    inline: true,
    port: 8080,
    historyApiFallback: 
      index: '/'
    
  

要配置你的 web 服务器让 react-router 处理所有的路由,你需要修改重定向规则。

如果您使用Amazon S3 进行统计托管,请阅读this guide。

如果您使用其他服务进行静态托管,请参阅文档。配置应如下所示:

我希望这个答案对您有所帮助,并为您指明正确的(重新)方向。

确保也使用 react-routerLink 组件进行导航。

【讨论】:

它确实引导我朝着正确的方向前进,我非常感谢您的支持,但我找到了一个替代帖子,它提供了一个非常简单的答案。我将在答案部分分享它 @static_null,看到这个answer【参考方案2】:

所以,我使用的是 Namecheap 的主机(共享主机),为了使用其他路线,您需要这样做

在我们上传/放置文件的目录中。我们需要创建一个.htaccess。在那个.htaccess 里放这个配置(对我来说是复制过去的)

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

【讨论】:

【参考方案3】:

对于 GCP 存储(相当于 Google 的 S3),我遵循了 yotke 的建议,效果很好:

gsutil web set -m index.html -e index.html

【讨论】:

以上是关于React 静态网站将除主页外的每个页面重定向到 404的主要内容,如果未能解决你的问题,请参考以下文章

如何强制将所有 404(或每个页面,无论是不是无效)重定向到主页?

使用 301 重定向重定向 404 是将现有页面重定向到主页

将旧页面重定向到主页/索引

登录 React Redux 应用程序后重定向到主页

将 .asp 页面重定向到我的新站点的主页

视频停止后如何重定向到主页