javascript - React Router - 未通过链接或 history.push 显式到达动态路由 URL 时未找到页面
问题描述
我正在尝试解决为什么我的应用程序中出现“找不到页面”/404 页面(?)。
我有一个路由器设置如下:
<Router>
<Search/>
<Switch>
<Route exact path="/cafes" component={ListView} />
<Route
path="/cafes/results/:loc"
component={Results}
/>
<Route component={NotFound} />
</Switch>
</Router>
如果我使用该<Search>
组件,它将通过以下代码调用结果路由:
this.props.history.push({
pathname: `/cafes/results/${searchAddress}`,
});
并且该<Results>
页面组件将成功显示搜索结果。它将有一个类似的 URL:http://myurl.com/cafes/results/Los%20Angeles%2C%20CA%2C%20USA
。
但是,如果我刷新页面,我会得到一个找不到页面。
据我了解,该<NotFound>
组件应该捕获与其上方不匹配的任何路线,但这并没有发生。
它是一个在 Wordpress 设置中运行的反应应用程序,任何以它开头的 URLcafes
都应该从 Wordpress 的设置中被禁止(虽然我不太了解那一点,但我没有设置它)。这个问题是否可能与 Wordpress 有关,或者我在我的 react-router 设置中搞砸了?
解决方案
这不是客户端(React 或其他)问题。证明这一点的事实是,当您留在客户端时一切正常(因此:调用.push
API),但一旦您重新加载,您就会转到服务器。
您必须将前端 Web 服务器配置为始终在/cafes
.
这通常通过使用 Apache/NGINX 配置来完成。
NGINX 示例可能是:
location / {
root /path/to/your/build/directory
try_files $uri $uri/ /index.html =404;
}
我不确定 Wordpress 是否可以为您执行此操作(但我不确定这是否是个好主意)
推荐阅读
- javascript - Best way to update array with new values by Id
- api - Linkedin API 403 error
- visual-studio - Resharper 颜色透明度选项
- javafx - 将 ListView 绑定到 ListProperty
- php - PHP数组到mysql
- c++ - 在matlab中用mex编译失败
- typescript - 传递给 super 的构造函数选项的运行时类型检查
- javascript - JavaScript addEventListener 由于某种原因不起作用
- javascript - javascript:不是选择器问题
- apache-spark - Apache Spark:广播连接不适用于缓存的数据帧