Amazon S3静态网站托管404动态路径重定向规则配置求助
解决S3静态网站托管404重定向的路径替换问题
我懂你遇到的麻烦了——S3的路由规则里直接写相对路径../../根本行不通,因为它会把整个字符串当成新的对象键来查找,而不是解析成实际的路径跳转。咱们得用S3路由规则支持的变量替换功能来搞定这个动态路径的重定向需求。
问题根源
你之前的规则里,<ReplaceKeyWith>../../default/index.html</ReplaceKeyWith>会让S3去查找名为../../default/index.html的对象,而不是把请求路径里的/us/en替换成/default。S3不会自动解析相对路径,必须用它提供的变量来处理动态路径。
正确的路由规则
下面这个规则会帮你实现需求,核心是用{key}变量获取请求的完整对象键,然后通过字符串替换把目标部分换掉:
<RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> <!-- 可选:添加这个前缀匹配,只对test/开头的路径生效,避免全局404都触发重定向 --> <KeyPrefixEquals>test/</KeyPrefixEquals> </Condition> <Redirect> <HostName>www.example.com</HostName> <!-- 替换路径中的/us/en/index.html为/default/index.html --> <ReplaceKeyWith>{key.replace('/us/en/index.html', '/default/index.html')}</ReplaceKeyWith> <!-- 可选:指定重定向代码,302是临时重定向,301是永久重定向,按需选择 --> <HttpRedirectCode>302</HttpRedirectCode> </Redirect> </RoutingRule> </RoutingRules>
规则说明
{key}是S3路由规则的内置变量,会自动获取当前请求的对象键(比如当访问test/A/us/en/index.html时,{key}的值就是test/A/us/en/index.html)。.replace('/us/en/index.html', '/default/index.html')会把对象键里的/us/en/index.html部分替换成/default/index.html,最终得到test/A/default/index.html,完美匹配你的动态路径需求。- 加上
<KeyPrefixEquals>test/</KeyPrefixEquals>可以避免桶里其他路径的404请求也触发这个重定向,让规则更精准。
额外提醒
一定要确保你的S3桶里确实存在test/{dynamic}/default/index.html这些对象(比如test/A/default/index.html、test/B/default/index.html),否则重定向后还是会返回404错误哦。
内容的提问来源于stack exchange,提问作者Jihyun Moon
相关产品推荐
相关产品推荐

