我正在使用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>
谢谢!
桶的根不是/
,它是空字符串。空键前缀不能完全满足您的要求,因为所有内容的前缀都与空字符串匹配(因为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
但旧页面已经无效,因此新页面将无效,因此不会丢失/没有任何收获。由于规则是按顺序匹配的,因此如果最后添加该规则,则它不会破坏其他任何内容。
或者,根据您实际需要执行的大计划,一旦从存储桶中删除了旧内容,此规则实际上可能是您唯一需要的重定向规则。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句