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 redirects"?

S3 中路由规则 return 的默认 http 状态似乎是 301 Moved Permanently。当看到此代码时,浏览器应该为后续请求使用新位置...因此,鉴于此,您看到的行为并非完全出乎意料。

A "temporary" 重定向,例如您正在执行的重定向,应该改为 return 302 Found(从技术上讲,302 是唯一重要的部分,某些实现将使用302 Moved Temporarily 或其他消息)。通过这样的重定向,浏览器应该将以后的请求发送到原始位置。

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

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