使用 React Router 在 Netlify 上找不到页面

2025-06-04

使用 React Router 在 Netlify 上找不到页面

                                照片由Hello I'm NikUnsplash上拍摄


如果您已经在使用netlify.toml,请查看这篇文章,


使用 React Router 将单页 React 站点部署到 Netlify 后,您可能会遇到以下错误。

页面未找到

看起来您点击了无效的链接或输入了此站点上不存在的 URL。

Netlify 上的错误消息

错误是如何发生的?

React Router 在客户端(浏览器)处理路由,因此当您访问非根页面(例如https://yoursite.netlify.com/else)时,Netlify(服务器端)不知道如何处理路由。

                                (因为您的路由是在根级别设置的)。

错误代码和演示

这是使用 React Router 的最简单的代码。

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);
view raw App.js hosted with ❤ by GitHub

当您直接转到 Netlify 时,会发生错误https://<netlify domain>/else

页面未找到演示

我们怎样才能解决这个问题?

Netlify 提供了一个特殊的文件_redirects,您可以将其添加到您的代码库中,并让 Netlify 处理如何处理客户端未处理的 URL。

Netlify 文档中有一个部分 “历史推送状态和单页应用程序”,它向您展示了如何重定向到 SPA URL 的根目录(但没有提到 React Router,因为它适用于其他客户端框架/库)。

因此,为了解决这个问题,我们需要创建一个名为_redirects您网站根目录的文件,其中包含以下内容。

_redirect 静态文件

                                进行相应更改index.html以匹配 SPA 根。

这里是工作现场

Netlify 已成功重定向至 SPA 根目录

有关重定向的更多方式和限制,请查看 Netlify 官方文档

资源

使用 React Router 在 Netlify 上找不到页面一文首先出现在Sung 的技术博客上。

文章来源:https://dev.to/dance2die/page-not-found-on-netlify-with-react-router-58mc
PREV
Tailwind 的 Create-React-App 速查表
NEXT
使用 GitHub Actions 构建 Gatsby 并部署到 Netlify