我有一个亚马逊S3存储桶,服务于S3bucketurl.com/foo/index.html
网站。
我想配置一个redirection rule,它会自动重写URL,如下所示:
访问S3bucketurl.com
应自动重定向到S3bucketurl.com/foo
,并提供子文件夹index.html
中包含的foo
文件。
我试图这样设置重定向规则:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>api</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
结果为
404
:404 Not Found
Code: NoSuchKey
Message: The specified key does not exist.
Key: index.html
我也尝试了
<ReplaceKeyWith>/api</ReplaceKeyWith>
,<ReplaceKeyWith>api/</ReplaceKeyWith>
和<ReplaceKeyWith>/api/</ReplaceKeyWith>
的排列无济于事。 最佳答案
<KeyPrefixEquals>/</KeyPrefixEquals>
这里有两个问题:首先,它匹配一个前缀,这意味着末尾有一个隐式*
。这不是您想要的,在这里。同样,S3存储桶中的键通常都没有前缀/
。对象键以斜杠后的字符开头。您的<ReplaceKeyWith>
被忽略,因为前缀测试永远不匹配。但是,规则并不是最好的解决方案。
做你想要的方式是这样的:
上载一个空文件以在存储桶的根目录中创建一个新对象,命名为您用于索引文档的任何名称,通常为index.html
。除非您的存储桶策略将所有内容都公开,否则将其公开。
在该对象的对象元数据中,将x-amz-website-redirect-location
设置为/api/
(或/foo/
或所需的任何路径)。