将 AngularJS HTML5Mode 的所有 AWS S3 http 请求重定向到 index.html

Redirect all AWS S3 http requests to index.html for AngularJS HTML5Mode

如何将对我的静态 AWS S3 网站的所有请求重定向到 index.html,以便我可以使用 AngularJS' HTML5 模式?

我最近了解到(令我无限高兴的是)可以使用 URL 中没有 # 的 AngularJS,方法是使用 HTML5 Mode. However, I know from this answer,这需要一些在服务器上设置,因为所有请求都必须重定向到正确的 html 文件(在本例中,index.html)才能正常工作。

我为我的站点使用 AWS S3 的静态网站托管。我尝试将此添加到我的重定向规则中:

<RoutingRules>
     <RoutingRule>
         <Redirect>
             <ReplaceKeyWith>/</ReplaceKeyWith>
         </Redirect>
     </RoutingRule>
</RoutingRules>

<RoutingRules>
     <RoutingRule>
         <Redirect>
             <ReplaceKeyWith>index.html</ReplaceKeyWith>
         </Redirect>
     </RoutingRule>
</RoutingRules>

但是我遇到了太多重定向的问题。

有没有办法通过静态网站托管在 AWS S3 中进行必要的重定向?

您可以将 AWS CloudFront 用于您的用例。在 CloudFront 后面设置 S3 存储桶并添加 index.html 作为默认路由。

仍然,如果页面在 angular 路由(例如 /home)中刷新,AWS CloudFront 将在 S3 中搜索 /home.html 文件和 return 404:未找到回复。但是有一个解决方法,您可以为 404 设置自定义错误响应:未找到 HTTP 错误代码指向 /index.html 响应页面路径。

有关详细信息,请参阅博客 post Using AWS CloudFront to serve an SPA hosted on S3