Amazon S3重写规则重定向问题

时间:2015-09-28 09:50:07

标签: php redirect amazon-s3 s3-rewrite-rules

我们使用Amazon S3存储来托管图像及其缩略图。我们上传没有缩略图的新图像,以便按需生成。为此,我们使用S3重写规则,如下所示:

<RoutingRules>
    <RoutingRule>
        <Condition>
           <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <HostName>mysite.com</HostName>
            <ReplaceKeyPrefixWith>/path/to/thumbnail/generator.php?image=</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

如果缩略图尚不存在,它将被重定向到我们的脚本,该脚本会生成新的缩略图,上传到S3并在响应中发送。该脚本工作正常,并做我们需要的。问题是,对于新生成的缩略图的所有下一次调用都会被重新定向到脚本,如果S3存储桶中已有缩略图,则会再次发生事件...

如何停止“下次重定向”?

1 个答案:

答案 0 :(得分:1)

S3中路由规则返回的默认http状态似乎为301 Moved Permanently。当看到这个代码时,浏览器应该将新位置用于后续请求......所以你看到的行为并不完全是意料之外的。

“临时”重定向(例如您正在进行的重定向)应返回302 Found(从技术上讲,302是唯一重要的部分,某些实现将使用302 Moved Temporarily或其他消息)。通过这种重定向,浏览器应该将未来的请求发送到原始位置。

使用<HttpRedirectCode>覆盖默认值应该是获得预期行为所必需的。

<Redirect>
  <HttpRedirectCode>302</HttpRedirectCode>
  <HostName>example.com</HostName>
  <ReplaceKeyPrefixWith>/path/to/thumbnail/generator.php?image=</ReplaceKeyPrefixWith>
</Redirect>