javascript - 浏览器刷新后如何加载反应页面?
问题描述
每当我在浏览器中输入 URL http://domain.de/beta/时,我都可以看到Verein的内容。如果我按 F5 刷新页面,我会收到 404 Not-Found 错误。
我正在使用来自 react-router-dom 的 BrowserRouter(v.5.2.0 > 我也检查了文档并按照示例进行操作)。
// inside my index.js of Create-React-App
render(
<React.StrictMode>
<BrowserRouter basename="/beta">
<Switch>
<Route
path="/verein/contact-imprint-privacy"
component={ContactImprintPrivacy}
/>
<Route path="/verein" component={Verein} />
<Route exact path="/">
<Redirect to="/verein" />
</Route>
<Route path="*" component={FourOhFour} />
</Switch>
</BrowserRouter>
</React.StrictMode>,
document.getElementById("root")
);
我yarn build
从文件夹运行 Web 应用程序并将其部署build
到我的托管空间。页面刷新我错过了什么?
更新,11.07:
我必须考虑服务器端应该如何处理 URL。因此,我添加了一个带有重写规则的.htaccess文件。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /beta
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /beta/index.html [L]
</IfModule>
解决方案
当你刷新你的应用程序时,你会得到一个 404 Not-Found 错误,因为你的应用程序去服务器找到 /verein 页面,但没有。React 路由器只是客户端路由,但第一个请求将始终是服务器。
您需要设置您的服务器以捕获所有传入的 url (/*) 并呈现您的 index.html
有关更详细的答案,您可以阅读此问题接受的答案:
推荐阅读
- python - Python - 在类实例中调用多个外部函数
- python - ModuleNotFoundError:没有名为“jose”的模块
- java - 为什么速度不显示应该显示为 "display: flex;" 正确吗?
- excel - Selenium 在页面加载时不返回结果
- installation - 在 Inno Setup 中需要时如何防止显示启动画面?
- reference - 如何停止 Mendeley 在 et al. ? 它只对 3 位作者的参考资料执行此操作
- javascript - 尝试在另一个 change() 中使用 change()
- angular - Angular 9 - ngx-translate,避免在多个组件中重复构造函数代码
- python-3.x - 在 Python 3 中获取输出的特定元素
- c++ - 在 C++ 中显式传递 *this