【问题标题】:How to redirect from bucket root to subdirectory in AWS S3?如何从存储桶根重定向到 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

我还尝试了&lt;ReplaceKeyWith&gt;/api&lt;/ReplaceKeyWith&gt;&lt;ReplaceKeyWith&gt;api/&lt;/ReplaceKeyWith&gt;&lt;ReplaceKeyWith&gt;/api/&lt;/ReplaceKeyWith&gt; 的排列,但无济于事。

【问题讨论】:

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


    【解决方案1】:

    &lt;KeyPrefixEquals&gt;/&lt;/KeyPrefixEquals&gt;

    这里有两个问题:首先,这匹配一个前缀,这意味着末尾有一个隐含的*。这不是你想要的,在这里。此外,S3 存储桶中的任何键通常都没有前缀 /。对象键以斜杠后的字符开头。您的 &lt;ReplaceKeyWith&gt; 被忽略,因为前缀测试从不匹配。但在这里,规则并不是最好的解决方案。

    做你想做的事情的方法是这样的:

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

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

    【讨论】:

    • 谢谢,这实际上是我自己想出的解决方案。很高兴看到这种方法得到证实。 :)
    猜你喜欢
    • 2018-06-04
    • 2016-12-08
    • 2020-02-15
    • 2020-08-07
    • 1970-01-01
    • 2014-04-17
    • 2022-01-23
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多