Amazon S3重写规则重定向问题


Amazon S3 rewrite rules redirection issue

我们使用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桶中已经有缩略图可用,那么对新生成的缩略图的所有next调用都会一次又一次地重定向到脚本事件。

如何阻止"下一个重定向"?

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>