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

如何将Angular应用程序部署到S3以响应路由URL,angular,amazon-s3,angular-routing,Angular,Amazon S3,Angular Routing,我有一个Angular应用程序,它使用路由,构建并部署到S3存储桶。如果我转到应用程序URL的根目录,它可以正常工作。e、 g.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

我有一个Angular应用程序,它使用路由,构建并部署到S3存储桶。如果我转到应用程序URL的根目录,它可以正常工作。e、 g.
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 bucket中没有与/home对应的文件

我如何确保URL请求通过应用程序而不是S3路由


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

您可以通过返回SPA的相应根页面,配置CloudFront以从S3角度处理“未找到”页面

  • 创建您的CloudFront发行版
  • 转到分发配置中的错误页面选项卡,并添加新的错误页面
  • 从CloudFront透视图处理的错误是404未找到错误,因此在HTTP错误代码字段中输入404
  • 选择自定义响应并输入应用程序的根html页面的位置(在S3 bucket中),例如/index.html
  • 从浏览器的角度来看,这是一个有效的请求和响应,因此在HTTP响应代码字段中输入200

S3基本上太“愚蠢”了,无法处理这个问题。您需要在S3前面有一个实体,它可以为您处理重写回/index.html的操作。在过去,我使用cloudflare worker为我做这件事。我相信AWS也有解决方案?也许是兰博达斯?这很有效。我还为403响应添加了同样的内容