首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当来自CF源的请求对象不存在时,s3不遵循重定向规则(相反,拒绝访问)

当来自CF源的请求对象不存在时,s3不遵循重定向规则(相反,拒绝访问)
EN

Stack Overflow用户
提问于 2018-04-04 22:42:56
回答 1查看 689关注 0票数 1

我正在使用CloudFront s3 API网关Lambda构建一个正在运行的映像优化器,但现在我仍在将CloudFront原点返回到s3自定义错误路径。

下面是我要找的流程:

  1. CloudFront请求图像
  2. 不存在/不存在?检查S3原产地。
  3. 不存在/不存在?重定向到hellowrld.html
  4. 做任何事情(这里的目标,甚至第三步,是让重定向触发一个Lambda,它调整图像大小并返回到S3CF和浏览器)。

如果我试图通过CloudFront访问一个不存在的对象,它将正确地遵循所提供的原点,但如果该对象不存在于S3中,则会给出如下所示的经典Access Denied XML响应。我的桶绝对有正确的写权限,并且有公共读取权限(暂时)。

这是我的CF起源/行为。最初,我只有一个默认的起源,一个默认的行为,这是我真正需要的,在我的摆弄中,我添加了一个顶层和一个深度的resizer/*级别。

下面是我的s3静态网站托管部分和重定向规则

我觉得我甚至不应该需要重定向规则,因为错误时应该重定向到hellowrld.html (而不是错误),这只是目前相当空白的测试html页面。

任何帮助都将不胜感激!我知道这个otf图像调整器是一个非常常见的用例,用于在没有找到对象的情况下触发Lambda,但是我找不到任何示例,它们将CloudFront放在S3前面的API 前面。

EN

回答 1

Stack Overflow用户

发布于 2018-04-05 11:05:30

似乎您在上述重定向规则中添加了错误的http错误代码。应该是403和307。我添加了完全重定向规则,您可以使用:

代码语言:javascript
复制
<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals/>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>'your_api_gateway_url'</HostName>
      <ReplaceKeyPrefixWith>prefix_name'?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49661533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档