2017-04-14 15 views
0

我有一个静态网站托管在S3上,包括/atom.xml。在我的访问日志中,我看到/feed/atom(没有扩展名)的请求,所以我想重定向它们。我可以配置一个S3静态站点来重定向一个确切的密钥吗?

我已经建立了重定向规则是这样的(由文档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

可以用不同的前缀重命名使用atom.xml的东西 – at0mzk

回答

2

两种选择:

选项1.除非没有匹配的对象,否则不要重定向。

<RoutingRule> 
    <Condition> 
    <KeyPrefixEquals>atom</KeyPrefixEquals> 
    <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals> 
    </Condition> 
    <Redirect><ReplaceKeyWith>atom.xml</ReplaceKeyWith></Redirect> 
</RoutingRule> 

注意,你可能会发现所需的错误代码是404,而不是403,但如果这是真的,那么你的水桶是配置错误,任何人都可以下载所有对象的XML上市在你的水桶。 403绝对是在这里使用的正确代码,如果存储桶配置不是过度开放。

选项2.在重定向元数据中使用空对象。

删除重定向规则。

上传命名的空文件“原子”,并设置以下元数据:

x-amz-website-redirect-location: /atom.xml 

http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html

相关问题