由于 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
我正在使用从 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