【问题标题】:How do I get my Angular app deployed to S3 respond to routing URLs如何让我的 Angular 应用程序部署到 S3 以响应路由 URL
【发布时间】:2020-09-12 04:45:42
【问题描述】:

我有一个使用路由的 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 错误,指出资源不存在。这是真的 - 在 /home 对应的 S3 存储桶中没有文件。

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

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

【问题讨论】:

  • S3 基本上太“笨”了,无法处理这个问题。您需要在 S3 前面有一个实体,它可以为您处理对 /index.html 的重写。过去,我使用 cloudflare worker 为我做这件事。我确定 AWS 也有解决方案吗?也许是 lambda?

标签: angular amazon-s3 angular-routing


【解决方案1】:

您可以将 CloudFront 配置为从 S3 角度处理“未找到”页面,方法是返回您的 SPA 的相应根页面。

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

【讨论】:

  • 这行得通。我也为 403 响应添加了相同的内容
猜你喜欢
  • 2021-10-19
  • 2015-12-15
  • 2019-07-17
  • 2017-04-14
  • 1970-01-01
  • 2019-03-12
  • 2021-12-25
  • 2020-01-01
  • 2016-06-03
相关资源
最近更新 更多