AWS S3多条件JSON重定向规则无法保存问题求助
解决AWS S3多条件JSON重定向规则只保留第一个条件的问题
我之前也踩过这个坑!你的问题根源在于JSON对象不允许存在重复键名——你把两组Condition和Redirect都塞进了同一个JSON对象里,后面的键会直接覆盖前面的,S3处理时自然只保留了第一组规则,而且因为这是JSON本身的语法特性,所以不会抛出报错。
正确的多规则写法
S3的重定向规则本质是一个独立规则对象的数组,每个重定向规则(包含一组Condition和对应的Redirect)都要作为数组里的单独元素。你需要把每个规则拆成独立的对象,再放到数组中,示例如下:
[ { "Condition": { "KeyPrefixEquals": "myfolder" }, "Redirect": { "HostName": "mynewdomain.com", "HttpRedirectCode": "301", "Protocol": "https", "ReplaceKeyPrefixWith": "mynewfolder" } }, { "Condition": { "KeyPrefixEquals": "myotherfolder" }, "Redirect": { "HostName": "mynewdomain.com", "HttpRedirectCode": "301", "Protocol": "https", "ReplaceKeyPrefixWith": "mynewotherfolder" } } ]
额外注意事项
- S3会按数组里的顺序匹配规则,一旦找到符合条件的规则就会执行重定向,所以记得按优先级排列你的规则(比如更具体的前缀放在前面)。
- 如果需要单规则多条件(比如同时匹配前缀和特定错误码),可以在单个
Condition对象里添加多个条件键,比如:{ "Condition": { "KeyPrefixEquals": "myfolder", "HttpErrorCodeReturnedEquals": "404" }, "Redirect": { ... } } - 关于旧规则转JSON:如果旧规则是XML格式的
<RoutingRule>,你可以手动批量转换——每个<RoutingRule>节点对应JSON数组里的一个对象,<Condition>标签内容对应Condition键,<Redirect>标签内容对应Redirect键。如果规则数量多,也可以写个简单的脚本(比如用Python的xmltodict库)自动转换,避免手动重复劳动。
内容的提问来源于stack exchange,提问作者Jas Singh
相关产品推荐
相关产品推荐

