CloudFront无尾部斜杠路径路由异常:/articles未转发至ELB
问题根因
CloudFront的路径通配符匹配有明确边界:当前配置的/articles/*模式,只会匹配以/articles/(带尾部斜杠)为前缀的请求,/articles/、/articles/123这类路径都能正常命中,但不带斜杠的/articles路径不符合匹配规则,会直接落到最低优先级的默认规则,被转发到S3源站。
解决方案
完全不需要上来就写CloudFront Function,直接调整行为配置就能解决,两种方案按需选择:
- 新增精确匹配规则(无跳转、性能最优)
在CloudFront行为列表里加一条新规则,优先级设为最高即可:比如新规则优先级填0,路径模式写/articles,源站选ELB,剩下的缓存策略、请求头/响应转发配置,和现有/articles/*对应的ELB规则保持完全一致;原来的/articles/*规则优先级顺延为1,默认*规则保持最低优先级。
等部署生效后,访问/articles的请求会直接命中这条精确匹配规则转发到ELB,用户侧没有任何跳转感知,后续维护只要保证这两条指向ELB的规则配置同步就行,成本极低。 - CloudFront Function重定向(适合有URL规范化要求的场景)
如果团队要求所有文章路径必须统一成带尾部斜杠的格式,也可以写个轻量CloudFront Function,挂在查看器请求阶段,判断到请求路径是/articles时,直接返回301/302状态码重定向到/articles/,之后请求自然会命中现有/articles/*规则转发到ELB。
这个方案会多一次重定向,用户访问/articles时浏览器地址栏会变成/articles/,没有强制URL格式要求的话没必要选。
内容的提问来源于stack exchange,提问作者kusumoto_teruya
相关产品推荐
相关产品推荐

