如何从存储桶根重定向到 AWS S3 中的子目录?
Posted
技术标签:
【中文标题】如何从存储桶根重定向到 AWS S3 中的子目录?【英文标题】:How to redirect from bucket root to subdirectory in AWS S3? 【发布时间】:2018-03-04 06:30:07 【问题描述】:我有一个亚马逊 S3 存储桶,为来自 S3bucketurl.com/foo/index.html
的网站提供服务。
我想配置一个redirection rule,自动重写URL如下:
访问S3bucketurl.com
应自动重定向到S3bucketurl.com/foo
,并提供包含在子文件夹foo
中的index.html
文件。
我尝试这样设置重定向规则:
<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>
的排列,但无济于事。
【问题讨论】:
【参考方案1】:
<KeyPrefixEquals>/</KeyPrefixEquals>
这里有两个问题:首先,这匹配一个前缀,这意味着末尾有一个隐含的*
。这不是你想要的,在这里。此外,S3 存储桶中的任何键通常都没有前缀 /
。对象键以斜杠后的字符开头。您的 <ReplaceKeyWith>
被忽略,因为前缀测试从不匹配。但在这里,规则并不是最好的解决方案。
做你想做的事情的方法是这样的:
上传一个空文件以在存储桶的根目录中创建一个新对象,命名为您用于索引文档的任何名称,通常为index.html
。除非您的存储桶策略公开所有内容,否则将其公开。
在此对象的对象元数据中,将x-amz-website-redirect-location
设置为/api/
(或/foo/
,或任何您想要的路径)。
【讨论】:
谢谢,这实际上是我自己想出的解决方案。很高兴看到这种方法得到证实。 :)以上是关于如何从存储桶根重定向到 AWS S3 中的子目录?的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudFront 如何遵循 S3 存储桶重定向规则?
使用 CloudFront 和目录重定向的 AWS S3 静态网站托管
使用 htaccess 将所有流量从根重定向到特定的子域页面