S3将基域重定向到密钥前缀文件夹

时间:2013-11-27 09:21:22

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

我正在使用S3存储桶来托管静态网站mydomain.com。最初的博客内容布局是

  • 的index.html
  • 文章/ article.html

现在我将所有博客内容保存在blog目录中。

  • 博客/ index.html中
  • 博客/文章/ article.html

我在mydomain.com上启用了网站托管服务。我想使用S3's custom redirection rules来重定向缺少“blog”前缀的旧网址。例如,mydomain.com/index.html应重定向到mydomain.com/blog/index.html

我试过

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyPrefixWith>blog/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>mydomain.com/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyPrefixWith>mydomain.com/blog</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

但第一个导致重定向循环(不奇怪),第二个不起作用。

2 个答案:

答案 0 :(得分:2)

您需要使用重定向规则并添加ReplaceKeyPrefixWith项:

<RoutingRules>
  <RoutingRule>
     <Redirect>
       <Protocol>https</Protocol>
       <HostName>mydomain.com</HostName>
       <ReplaceKeyPrefixWith>blog/</ReplaceKeyPrefixWith>
       <HttpRedirectCode>301</HttpRedirectCode>
     </Redirect>
  </RoutingRule>
</RoutingRules>

注意:某些浏览器缓存可能非常粘,因此请确保您使用其他浏览器会话检查重定向规则,或关闭并重新打开浏览器进行检查。

答案 1 :(得分:2)

检查以下hack是否有效 - 在条件中添加“HttpErrorCodeReturnedEquals = 404”。我期待发生以下一系列事件

  1. 访问“www.example.com/index.html”
  2. 获取404,因为页面不存在
  3. 您的前缀条件与404匹配a 重定向规则
  4. 因此应将“/ blog”添加为前缀
  5. 返回“www.example.com/blog/index.html”页面。
  6. 阅读文档我没有找到一种方法来指定负面条件,如“KeyPrefixNotEquals”以避免递归