如何从桶根重定向到AWS S3中的子目录?

时间:2017-09-22 15:57:17

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

我有一个亚马逊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>的排列无效。

1 个答案:

答案 0 :(得分:2)

  

<KeyPrefixEquals>/</KeyPrefixEquals>

这里有两个问题:第一,这匹配前缀,这意味着最后有一个隐含的*。这不是你想要的。此外,S3存储桶中的任何密钥通常都不具有/的前缀。对象键以前导斜杠后面的字符开头。您的<ReplaceKeyWith>被忽略,因为前缀测试从不匹配。但是规则并不是最好的解决方案。

做你想做的事是这样的:

上传空文件以在存储桶根目录中创建新对象,命名为您用于索引文档的名称,通常为index.html。除非您的存储桶策略将所有内容公开,否则请将其公开。

在此对象的对象元数据中,将x-amz-website-redirect-location设置为/api/(或/foo/,或您想要的任何路径。)