我有一个亚马逊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>
的排列无效。
答案 0 :(得分:2)
<KeyPrefixEquals>/</KeyPrefixEquals>
这里有两个问题:第一,这匹配前缀,这意味着最后有一个隐含的*
。这不是你想要的。此外,S3存储桶中的任何密钥通常都不具有/
的前缀。对象键以前导斜杠后面的字符开头。您的<ReplaceKeyWith>
被忽略,因为前缀测试从不匹配。但是规则并不是最好的解决方案。
做你想做的事是这样的:
上传空文件以在存储桶根目录中创建新对象,命名为您用于索引文档的名称,通常为index.html
。除非您的存储桶策略将所有内容公开,否则请将其公开。
在此对象的对象元数据中,将x-amz-website-redirect-location
设置为/api/
(或/foo/
,或您想要的任何路径。)