【问题标题】:Error 404 when using GITHUB when I reload the page重新加载页面时使用 GITHUB 时出现错误 404
【发布时间】:2021-12-31 12:04:06
【问题描述】:

我正在使用 react 制作一个电子商务网站,并将网站上传到 Github 页面,部署工作正常,但是当我单击导航按钮转到网页的不同部分并重新加载页面时,出现错误 404 :

Failed to load resource: the server responded with a status of 404 ()

在本地主机中它工作得很好。我是否需要再次将我的网站部署为新项目?我一直以同样的方式上传网站,我没有这个问题。我实现了我的 google浏览器,会不会有兼容性问题?非常感谢!

【问题讨论】:

  • 在“console”选项卡中,在 dev-tools 里面,你有什么额外的信息吗?

标签: javascript react-native github-pages


【解决方案1】:

注意:我假设您将 create-react-app 与 JSX 和 react-router-dom 一起使用,如下所示:

<BrowserRouter>
  <Routes>
    <Route exact path="/" element={<HomePage />} />
    <Route path="cart" element={<CartPage />} />
    <Route path="settings" element={<SettingsPage />} />
  </Routes>
</BrowserRouter>

嗯,GitHub Pages 中的 HTTP 路由与在本地计算机中使用 npm start 命令的工作方式不同。幸运的是,create-react-apphave already explained the technical reasons behind this 背后的开发者们:

如果您使用在底层使用 HTML5 pushState history API 的路由器(例如,带有 browserHistory 的 React Router),许多静态文件服务器将会失败。例如,如果您将 React Router 与 /todos/42 的路由一起使用,则开发服务器将正确响应 localhost:3000/todos/42,但为上述生产构建提供服务的 Express 则不会。

这是因为当 /todos/42 重新加载页面时,服务器会查找文件 build/todos/42 并没有找到它。 需要将服务器配置为通过服务index.html 来响应对/todos/42 的请求。

是的,GitHub Pages 也算作静态文件服务器, 并期望这些路由可作为单独的静态文件(例如 build/cart.html 用于 /cart 路由),以及目标这是为了欺骗 GitHub Pages 为所有这些路由提供 index.html。但是,目前无法在 GitHub Pages 方面解决此问题,例如通过应用 .htaccess 配置文件(因为 GitHub Pages 不使用 Apache Web 服务器)或转到 GitHub 上的存储库设置。

那么,这里可以做些什么呢?上面的代码 sn-p 使用&lt;BrowserRouter&gt;,已知它与 GitHub Pages 托管不兼容。好消息是,许多人建议&lt;BrowserRouter&gt; 替换为&lt;HashRouter&gt; 这应该适用于几乎所有静态文件服务器(请参阅技术原因here)。 dedicated FreeCodeCamp article 介绍了如何为您的 React 项目设置 &lt;HashRouter&gt; 并将其发布到 GitHub Pages。


注意: 将其替换为 &lt;HashRouter&gt; 后,您需要注意 HTML/JSX 标记中现有的硬编码路径,因为 &lt;HashRouter&gt; 使用旧的 HTML 锚/ID 标记(例如#menu)。这意味着您的 React 应用程序中的&lt;a href="/cart"&gt;必须替换为&lt;a href="#/cart"&gt;(注意那里的附加哈希/# 字符),否则它将再次返回 404。

【讨论】:

  • 谢谢!是的,我还在学习使用 React Router V6。这对我帮助很大
【解决方案2】:

在你的 package.json 中添加一个带值的字段名称

"homepage":"."

在 public 和你的 build 文件夹中创建一个文件为 _redirects 在里面写这个代码

/* /index.html 200

【讨论】:

  • 非常感谢!是的,我也这样做了。
猜你喜欢
  • 2018-10-21
  • 2022-12-14
  • 2021-06-05
  • 2012-02-23
  • 2020-12-02
  • 2019-05-17
  • 2019-01-22
  • 2016-05-07
  • 1970-01-01
相关资源
最近更新 更多