首页 > 解决方案 > 如果页面未知或重定向,托管的静态文件不会重定向

问题描述

该项目由 Jenkins 构建并使用静态文件托管。当我在本地npm run start对其进行测试时,一切正常。但是,在托管静态文件的生产中,我得到了404重定向和未知页面。

尝试在本地进行调试,我设置了类似的情况。

当我转到 simpleserver 并转到不存在的路线时/thisdoesnotexist,我也得到了一个404.

我试过使用HashRouterwhich 似乎没有解决任何问题。此外,我尝试redirect在底部使用 aswitch来重定向不存在的路由,/如果没有识别到​​任何内容。这似乎也不起作用。

在静态构建中处理不存在的路由和重定向的最佳方法是什么?

标签: reactjsjenkinsreact-routerrouter

解决方案


准确地说,它完全取决于您的系统和基础设施的设计方式。但这是我所看到的大多遵循的。

不存在的路由:这种类型的页面主要在您的客户端路由器内部处理,仅提供首先检查所有路由,如果没有匹配则使用一个通用组件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>那也应该有效


推荐阅读