我在S3上托管了一个静态网站,包括/atom.xml
。在我的访问日志中,我看到/feed
和/atom
(无扩展名)的请求,因此我想重定向它们。
我已经设置了这样的重定向规则(如文档here所述):
<RoutingRules>
<RoutingRule>
<Condition><KeyPrefixEquals>feed</KeyPrefixEquals></Condition>
<Redirect><ReplaceKeyWith>atom.xml</ReplaceKeyWith></Redirect>
</RoutingRule>
<RoutingRule>
<Condition><KeyPrefixEquals>atom</KeyPrefixEquals></Condition>
<Redirect><ReplaceKeyWith>atom.xml</ReplaceKeyWith></Redirect>
</RoutingRule>
</RoutingRules>
第一个(feed -> atom.xml
)工作正常,但第二个(atom -> atom.xml
)会导致重定向循环,因为它匹配键前缀,而不是整个关键。
我尝试制作匹配器atom/
,如果请求是/atom/
,则可行,但不仅仅是/atom
。
有没有办法更智能地匹配密钥?
答案 0 :(得分:2)
两个选项:
选项1.除非没有匹配的对象,否则不要重定向。
<RoutingRule>
<Condition>
<KeyPrefixEquals>atom</KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect><ReplaceKeyWith>atom.xml</ReplaceKeyWith></Redirect>
</RoutingRule>
请注意,您可能会发现所需的错误代码是404而不是403,但如果这是真的,那么您的存储桶配置错误,任何人都可以下载存储桶中所有对象的XML列表。如果存储桶配置没有过度打开,403肯定是这里使用的正确代码。
选项2.使用带有重定向元数据的空对象。
删除重定向规则。
上传名为&#34; atom&#34;的空文件并设置以下元数据:
x-amz-website-redirect-location: /atom.xml
http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html