如何将我的Angular应用程序部署到S3以响应路由URL

问题描述

我有使用路由的Angular应用程序,该应用程序已构建并部署到S3存储桶。如果我转到应用程序URL的根目录,则效果很好。例如www.my-app.com.s3.foo.bar.amazonaws.com/

它在应用程序中运行良好。例如,如果我跟随一个指向['/ home']的路由器链接,它会转到www.my-app.com.s3.foo.bar.amazonaws.com/home,依此类推。

但是,如果我直接进入www.my-app.com.s3.foo.bar.amazonaws.com/home,则会收到S3错误消息,表明资源不存在。的确如此-S3存储桶中没有与/ home对应的文件

如何确保URL请求是通过应用而不是S3路由的?

更新:看来CloudFront可能会这样做。我要在CloudFront中配置什么?

解决方法

您可以通过返回SPA的相应根页面,将CloudFront配置为处理S3透视图中的“未找到”页面。

  • 创建您的CloudFront发行版。
  • 转到分发配置中的“错误页面”标签,然后添加一个新的错误页面。
  • 您从CloudFront角度处理的错误是404错误,请在HTTP错误代码字段中输入404。
  • 选择自定义响应,然后为您的应用输入html根HTML页面的位置(在S3存储桶中),例如/index.html。
  • 从浏览器的角度来看,这是有效的请求和响应,因此在“ HTTP响应代码”字段中输入200。