我们使用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存储桶中已有缩略图,则会再次发生事件...
如何停止“下次重定向”?
答案 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>