【问题标题】:Redirect homepage in S3 Routing Rules在 S3 路由规则中重定向主页
【发布时间】:2016-12-15 15:11:17
【问题描述】:

我正在使用 S3 路由规则来弃用旧域,将流量路由到新域。所以,旧域名是product.com,新地址是my-organization.com/product/

我正在使用路由规则来重定向页面。所以,我有一个这样的规则来重定向常见问题:

    <Condition>
        <KeyPrefixEquals>faq</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <Protocol>https</Protocol>
        <HostName>my-organization.com</HostName>
        <ReplaceKeyPrefixWith>product/faq</ReplaceKeyPrefixWith>
        <HttpRedirectCode>301</HttpRedirectCode>
    </Redirect>

这很好用!

剩下要做的一件事是将旧主页重定向到产品页面。我试过用/来匹配主页:

<KeyPrefixEquals>/</KeyPrefixEquals>

但它似乎不匹配任何东西。我已经尝试在空键上进行匹配:

<KeyPrefixEquals></KeyPrefixEquals>

但这符合一切。有没有办法在 S3 路由规则中重定向主页?我想要的是这样的:

    <Condition>
        <KeyPrefixEquals>/</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <Protocol>https</Protocol>
        <HostName>my-organization.com</HostName>
        <ReplaceKeyPrefixWith>product/</ReplaceKeyPrefixWith>
        <HttpRedirectCode>301</HttpRedirectCode>
    </Redirect>

谢谢!

【问题讨论】:

    标签: redirect amazon-s3 routing static-site


    【解决方案1】:

    存储桶的根不是/,它是空字符串。空键前缀不会完全符合您的要求,因为所有内容都有一个匹配空字符串的前缀(因为LEFT(${some_string},LENGTH('')) == '',无论${some_string} 的内容如何),所以这样的规则不会匹配 无论如何,只有根。它会匹配所有内容。

    没有办法只专门重定向根页面,但这是我一直在使用的解决方法,效果很好。将此作为您的最后一条路由规则(因为它们是按顺序匹配的,并且如果那里还没有页面,则该规则确实匹配尚未匹配的所有内容)。

    <RoutingRule>
        <Condition>
            <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <ReplaceKeyPrefixWith>product/</ReplaceKeyPrefixWith>
            <Protocol>https</Protocol>
            <HostName>new-site.example.com</HostName>
        </Redirect>
    </RoutingRule>
    

    您不应启用存储桶的公开列表,但如果启用,则需要将 403 替换为 404。如果您有索引文档,则需要将其删除。

    基本上,对于由于该路径缺少公共页面而被拒绝的任何请求,product/ 被附加,因此http://bucket.example.com/ 变为https://new-site.example.com/product/

    同样,http://bucket.example.com/some/random/file.txt 将重定向到https://new-site.example.com/product/some/random/file.txt,但旧页面已经无效,因此新页面将无效,因此没有任何损失/没有任何收获。由于规则是按顺序匹配的,因此如果您最后添加此规则,则不应破坏其他任何内容。

    或者,根据您实际需要执行的总体方案,一旦您从存储桶中删除旧内容,此规则实际上可能是您需要的唯一重定向规则。

    【讨论】:

    • 射击。这是我烦人地添加更多我忘记提及的要求的地方。另一个要求是我已经有一个包罗万象的规则,它将博客文章从旧域重定向到新域。博客文章只是简单地映射,因此它们的旧路径在新域上是相同的。因此,根目录转到产品页面,功能页面(如常见问题解答)放置在产品页面下,而博客文章只是映射(但无法枚举)。我认为最终的解决方案是让博客文章重定向到产品页面。蹩脚,但它会工作。
    • 可能的解决方法:将x-amz-website-redirect-location 添加到存储桶根目录下对象index.html(无论您用作索引文档名称的什么)的元数据中,值为https://new-site.example.com/product/。这些被处理为 301,假设 S3 处理从索引文档重定向。
    猜你喜欢
    • 2018-05-28
    • 2015-06-11
    • 1970-01-01
    • 2019-02-01
    • 2018-07-18
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多