由于 React SPA 中的 Hasbangs,无法访问刷新页面

Cannot access page on Refresh due to Hasbangs in a React SPA

我正在使用从 https://github.com/facebookincubator/create-react-app

创建的 ReactJS SPA

我正在使用 S3 和 Cloudfront 来为我的网站提供服务。一切正常,直到我重新加载页面 - 它抛出一个错误(在我的情况下访问被拒绝),因为没有 Hashbang 就无法处理。

注意:如果我输入 URL 和 hashbang

就可以正常工作

所以本质上,这是有效的:https://example.com/#/dashboard (Redirects to https://example.com/dashboard)

但是如果我刷新页面,它会给出如下错误:

我们正在使用 browserHistory 来维护路线。我只显示相关代码:

<Router history={browserHistory}>
<Route path='/dashboard' component={Dashboardpage} />
</Router>

当您向服务器发出 https://example.com/dashboard, the first request i.e https://example.com 请求时,它应该 return 包含您的 react-router 的 index.html 足够聪明 了解路径,即没有 hashbangs 并加载所需的 component.So 必须在服务器端设置一些重定向路由。

在您点击 https://example.com/dashboard 的情况下,S3 和云端应处理错误代码(即 404 或任何错误代码)并将页面重定向到 index.html,之后 react-router 将处理要加载的组件。

希望我的回答很清楚 ;)

也可以参考这里给出的答案

除了 Shailaja 解释的错误页面设置外,请确保您的 CloudFront 分配指向网站端点而不是 api 端点。 API端点将无法与 react-router 一起正常工作。

API 端点:

bucket-name.s3-website-region.amazonaws.com

网站端点:

bucket-name.s3-website.region.amazonaws.com