Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect 重定向S3路由规则中的主页_Redirect_Amazon S3_Routing_Static Site - Fatal编程技术网

Redirect 重定向S3路由规则中的主页

Redirect 重定向S3路由规则中的主页,redirect,amazon-s3,routing,static-site,Redirect,Amazon S3,Routing,Static Site,我正在使用S3路由规则来弃用旧域,将流量路由到新域。因此,旧域是product.com,新位置是myorganization.com/product/ 我正在使用路由规则重定向页面。因此,我有一个这样的规则来重定向FAQ: <Condition> <KeyPrefixEquals>faq</KeyPrefixEquals> </Condition> <Redirect> <P

我正在使用S3路由规则来弃用旧域,将流量路由到新域。因此,旧域是
product.com
,新位置是
myorganization.com/product/

我正在使用路由规则重定向页面。因此,我有一个这样的规则来重定向FAQ:

    <Condition>
        <KeyPrefixEquals>faq</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <Protocol>https</Protocol>
        <HostName>my-organization.com</HostName>
        <ReplaceKeyPrefixWith>product/faq</ReplaceKeyPrefixWith>
        <HttpRedirectCode>301</HttpRedirectCode>
    </Redirect>
但它似乎与任何东西都不匹配。我试着在空键上匹配:

<KeyPrefixEquals></KeyPrefixEquals>

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

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

/
https
my-organization.com
产品/
301

谢谢

存储桶的根不是
/
,而是空字符串。空键前缀并不能完全满足您的要求,因为任何东西都有一个与空字符串匹配的前缀(因为
LEFT(${some_string},LENGTH(“”))=='
,而不管
${some_string}
的内容如何),所以这样的规则在任何情况下都不会只匹配根。它会匹配一切

没有办法只重定向根页面,但我一直在使用的解决方法很好地解决了这个问题。将此作为最后一个路由规则(因为它们是按顺序匹配的,如果还没有页面,则此规则确实匹配所有尚未匹配的内容)


403
产品/
https
new-site.example.com
您不应该启用bucket的公共列表,但如果启用,则需要将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
但是旧页面已经无效,因此新页面将无效,因此没有任何损失/没有任何收获。因为规则是按顺序匹配的,所以如果您最后添加,则此规则不应破坏任何其他规则


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

bucket的根不是
/
,而是空字符串。空键前缀并不能完全满足您的要求,因为任何东西都有一个与空字符串匹配的前缀(因为
LEFT(${some_string},LENGTH(“”))=='
,而不管
${some_string}
的内容如何),所以这样的规则在任何情况下都不会只匹配根。它会匹配一切

没有办法只重定向根页面,但我一直在使用的解决方法很好地解决了这个问题。将此作为最后一个路由规则(因为它们是按顺序匹配的,如果还没有页面,则此规则确实匹配所有尚未匹配的内容)


403
产品/
https
new-site.example.com
您不应该启用bucket的公共列表,但如果启用,则需要将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
但是旧页面已经无效,因此新页面将无效,因此没有任何损失/没有任何收获。因为规则是按顺序匹配的,所以如果您最后添加,则此规则不应破坏任何其他规则


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

shot。这就是我恼火地添加更多我忘记提及的需求的地方。另一个要求是我已经有了一个“一网打尽”的规则,可以将博客文章从旧域重定向到新域。博客帖子只是简单地映射到新域上,所以它们的旧路径是相同的。因此,根目录转到产品页面,功能页面(如FAQ)放在产品页面下,博客文章只是映射(但无法枚举)。我认为最终的解决方案是将博客文章重定向到产品页面。Lame,但它会起作用。可能的破解方法:在bucket根添加对象
index.html
(无论用作索引文档名的是什么)的元数据,值为
https://new-site.example.com/product/
。假设S3处理来自索引document.Shoot的重定向,则这些文件将作为301处理。这就是我恼火地添加更多我忘记提及的需求的地方。另一个要求是我已经有了一个“一网打尽”的规则,可以将博客文章从旧域重定向到新域。博客帖子只是简单地映射到新域上,所以它们的旧路径是相同的。因此,根目录转到产品页面,功能页面(如FAQ)放在产品页面下,博客文章只是映射(但无法枚举)。我认为最终的解决方案是将博客文章重定向到产品页面。Lame,但它会起作用。可能的破解方法:在bucket根添加对象
index.html
(无论用作索引文档名的是什么)的元数据,值为
https://new-site.example.com/product/
。假设S3处理来自in的重定向,则它们被处理为301
    <Condition>
        <KeyPrefixEquals>/</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <Protocol>https</Protocol>
        <HostName>my-organization.com</HostName>
        <ReplaceKeyPrefixWith>product/</ReplaceKeyPrefixWith>
        <HttpRedirectCode>301</HttpRedirectCode>
    </Redirect>
<RoutingRule>
    <Condition>
        <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyPrefixWith>product/</ReplaceKeyPrefixWith>
        <Protocol>https</Protocol>
        <HostName>new-site.example.com</HostName>
    </Redirect>
</RoutingRule>