使用 React Router 在 Netlify 上找不到页面
如果您已经在使用netlify.toml
,请查看这篇文章,
使用 React Router 将单页 React 站点部署到 Netlify 后,您可能会遇到以下错误。
页面未找到
看起来您点击了无效的链接或输入了此站点上不存在的 URL。

错误是如何发生的?
React Router 在客户端(浏览器)处理路由,因此当您访问非根页面(例如https://yoursite.netlify.com/else
)时,Netlify(服务器端)不知道如何处理路由。
(因为您的路由是在根级别设置的)。
错误代码和演示
这是使用 React Router 的最简单的代码。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import React from "react"; | |
import ReactDOM from "react-dom"; | |
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom"; | |
import "./styles.css"; | |
const Main = () => <h1>Main!</h1>; | |
const Elsewhere = () => <h1>Elsewhere!</h1>; | |
function App() { | |
return ( | |
<Router> | |
<div> | |
<nav> | |
<ul> | |
<li> | |
<Link to="/">Main</Link> | |
</li> | |
<li> | |
<Link to="/else">Else</Link> | |
</li> | |
</ul> | |
</nav> | |
<Switch> | |
<Route path="/" exact component={Main} /> | |
<Route path="/else/" component={Elsewhere} /> | |
</Switch> | |
</div> | |
</Router> | |
); | |
} | |
const rootElement = document.getElementById("root"); | |
ReactDOM.render(<App />, rootElement); |
当您直接转到 Netlify 时,会发生错误https://<netlify domain>/else
。

我们怎样才能解决这个问题?
Netlify 提供了一个特殊的文件_redirects,您可以将其添加到您的代码库中,并让 Netlify 处理如何处理客户端未处理的 URL。
Netlify 文档中有一个部分 “历史推送状态和单页应用程序”,它向您展示了如何重定向到 SPA URL 的根目录(但没有提到 React Router,因为它适用于其他客户端框架/库)。
因此,为了解决这个问题,我们需要创建一个名为_redirects
您网站根目录的文件,其中包含以下内容。

进行相应更改index.html
以匹配 SPA 根。
这里是工作现场。

有关重定向的更多方式和限制,请查看 Netlify 官方文档。
资源
- 我在 Reddit 上找到了答案 –如何使用 Netlify 和 React Router v4 处理前端路由?
- _redirects Netlify SPA 文档。
- 带有文件的源代码
_redirects
。 - 不带 文件的源代码
_redirects
。 - 带有 _redirects 文件的Netlify 站点。
- Netlify 网站没有_redirects文件。
使用 React Router 在 Netlify 上找不到页面一文首先出现在Sung 的技术博客上。
文章来源:https://dev.to/dance2die/page-not-found-on-netlify-with-react-router-58mc