我是否可以将S3静态站点配置为针对确切的密钥重定向?

时间:2017-04-14 09:14:44

标签: amazon-web-services redirect amazon-s3

我在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

有没有办法更智能地匹配密钥?

1 个答案:

答案 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