【问题标题】:How can I add a redirect rule to AWS S3 bucket?如何向 AWS S3 存储桶添加重定向规则?
【发布时间】:2019-11-16 10:16:45
【问题描述】:

我有一个包含图像和default.png 图像的 AWS S3 存储桶。 所有图像都是公开的,但我希望用户在尝试访问不存在的图像时获得default.pnge.g. .../non_exist.png

https://docs.aws.amazon.com/AmazonS3/latest/dev/CustomErrorDocSupport.html

我发现了一些听起来相关的东西,但是文档很差,它只告诉存在这样的功能,而不是如何去做。

当用户尝试访问不在存储桶中的图像时,如何设置默认图像?

谢谢!

【问题讨论】:

  • 这看起来不像是一个编程问题。

标签: amazon-web-services amazon-s3


【解决方案1】:

从文档中您想为 HTTP 错误设置重定向。

https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html#advanced-conditional-redirects

示例 3:重定向 HTTP 错误

假设当一个请求的对象没有找到时,你想重定向 对 Amazon Elastic Compute Cloud (Amazon EC2) 实例的请求。添加重定向规则,以便在返回 HTTP 状态代码 404(未找到)时,将站点访问者重定向到处理请求的 Amazon EC2 实例。以下示例还在重定向中插入对象键前缀 report-404/。例如,如果您请求页面 ExamplePage.html 并导致 HTTP 404 错误,则请求将重定向到指定 Amazon EC2 实例上的页面 report-404/ExamplePage.html。如果没有路由规则,出现HTTP错误404,则返回配置中指定的错误文档。

S3 存储桶之一的示例路由规则。

  <RoutingRules>
<RoutingRule>
<Condition>
  <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals >
</Condition>
<Redirect>
  <ReplaceKeyWith>default.png</ReplaceKeyWith>
</Redirect>
</RoutingRule>

【讨论】:

  • 与此规则匹配的适当代码是 403 而不是 404 除非存储桶允许公开 listing 对象(这通常不是您想要的允许)。不知道为什么文档似乎没有提到它。 stackoverflow.com/a/24001725/1695906
【解决方案2】:

s3 配置为网站托管时,您可以将 404 自定义文档目标配置为 URL。在这里您可以指定default.png

我对这个问题的解决方案如下: 将 aws cloudfront 和 s3 存储桶配置为它的源。将lambda@edge 配置到此云端,您可以在其中以编程方式检查图像是否存在,如果不存在,则为所有 404 请求返回默认图像。

Aws cloudfront 还将帮助您在边缘位置缓存图像。

【讨论】:

    【解决方案3】:

    您可以在 S3 前面使用 cloudfront 来添加自定义重定向错误页面。例如,请参阅下面的屏幕截图,其中我有 /error.html 用于在存储桶中找不到图像的任何请求。

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 2019-05-27
      • 2016-12-08
      • 2019-08-17
      • 2020-02-15
      • 2021-07-10
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多