Reactjs s3提供的React应用程序在edge/IE上显示404页

Reactjs s3提供的React应用程序在edge/IE上显示404页,reactjs,internet-explorer,amazon-s3,react-router,microsoft-edge,Reactjs,Internet Explorer,Amazon S3,React Router,Microsoft Edge,因此,我有一个React/Redux应用程序,目前正通过AmazonS3提供服务。我们已经将s3配置为以4xx错误呈现index.html页面,并为bundle.js提供服务。这允许react路由器进行引导并从那里接管。直到最近,这项工作还没有问题。现在,当我尝试访问IE或Edge中的页面时,我得到了IE或Edge 404页面 如果我关闭IE浏览器上的“显示友好的HTTP错误消息”选项,则一切正常。根据我所做的研究,这是我对正在发生的事情的理论: 当客户端点击请求的路由时,react路由器尚未启

因此,我有一个React/Redux应用程序,目前正通过AmazonS3提供服务。我们已经将s3配置为以4xx错误呈现index.html页面,并为bundle.js提供服务。这允许react路由器进行引导并从那里接管。直到最近,这项工作还没有问题。现在,当我尝试访问IE或Edge中的页面时,我得到了IE或Edge 404页面

如果我关闭IE浏览器上的“显示友好的HTTP错误消息”选项,则一切正常。根据我所做的研究,这是我对正在发生的事情的理论:

当客户端点击请求的路由时,react路由器尚未启动。这将导致404,必须通过呈现/index.html页面来拯救404。返回404时,IE/Edge将进入并呈现其自己的404页面,这将阻止index.html被呈现

我有点不知所措,不知道如何解决这个问题而不实际使用完整的后端。我可以在s3设置中配置重定向,用index.html替换根url,但这将断开主路由的所有子路由。是否有一种方法可以配置应用程序,使其在所有主要浏览器上工作,而不实际实现后端

编辑:所以我找到了这篇文章,它展示了如何通过在自定义错误上呈现索引来使用cloudfront解决此问题:。有人知道使用cloud flare是否可以做到这一点吗?我个人实际上没有访问cloudflare的权限,因此我不确定是否有可能

好的,所以我发现:

1您无法在cloudflare中挽救此错误

2您可以将cloudfront置于S3和cloudflare之间,只需实现一个自定义错误规则


3在为cloudfront选择存储桶时,不要使用标准下拉选项。如果在配置错误规则时给出bucket名称,cloudfront会将其视为普通文件而不是静态站点,因此无法拦截错误。您必须为bucket使用完全限定的url。我希望这能节省一些时间。我为这个问题睡了一觉

如果它在禁用显示友好HTTP错误消息的情况下工作,那么也可以通过延长错误页来解决此问题。默认情况下,如果小于,IE将显示这些页面