reactjs - 如果页面未知或重定向,托管的静态文件不会重定向
问题描述
该项目由 Jenkins 构建并使用静态文件托管。当我在本地npm run start
对其进行测试时,一切正常。但是,在托管静态文件的生产中,我得到了404
重定向和未知页面。
尝试在本地进行调试,我设置了类似的情况。
- 创建静态文件
npm run build
- 在本地托管文件
python -m SimpleHTTPServer
当我转到 simpleserver 并转到不存在的路线时/thisdoesnotexist
,我也得到了一个404
.
我试过使用HashRouter
which 似乎没有解决任何问题。此外,我尝试redirect
在底部使用 aswitch
来重定向不存在的路由,/
如果没有识别到任何内容。这似乎也不起作用。
在静态构建中处理不存在的路由和重定向的最佳方法是什么?
解决方案
准确地说,它完全取决于您的系统和基础设施的设计方式。但这是我所看到的大多遵循的。
不存在的路由:这种类型的页面主要在您的客户端路由器内部处理,仅提供首先检查所有路由,如果没有匹配则使用一个通用组件404Component
。
静态路由:对于这种类型的路由,首先你想从服务器而不是浏览器调用,其次在 Web 服务器上你需要这种类型的路由的特殊规则,它返回静态页面而不是客户端应用程序。我已经使用nginx
过这种设置,其中所有静态页面都转到某些S3
页面,而其他页面则转到我的客户端路由器。
这种类型的设置应该可以工作
const reload = () => window.location.reload();
<Router>
// all your client routes..
...
// Your special static routes..
<Route path="/sitemap.xml" onEnter={reload} />
<Route path="/something.html" onEnter={reload} />
</Router>
另外,如果您可以将target="_blank"
属性放入您的<Link>
那也应该有效
推荐阅读
- oracle-apex - 单击按钮时如何在 apex builder 中关闭窗口
- typescript - 将 Typescript 编译为原生浏览器 ES 模块
- html - 接受输入类型验证问题
- json - Flutter - 读取JSON文件时错误没有这样的文件或目录
- java - 错误:二元运算符“&&”的操作数类型错误。这个错误是什么意思?
- snmp - 如果我没有 LA,我可以使用 SNMP 来发现设备吗
- java - java中的“this”不是指当前对象的成员。但是,这取决于访问点。为什么?
- python - Pyomo:KeyError:“索引'(0,1,1)'对于索引组件'x_ijl'无效”
- azure-devops - 带有个人访问令牌的 VSTS 仪表板访问
- sql - 以有效的方式从数组元素中获取所有可能的组合