You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义域名下CloudFront静态资源返回301,期望获取200状态码

问题核心根因

从你提供的响应头信息可以直接定位两个连锁触发点:

  • x-cache显示CloudFront命中,说明当前返回的301是已经被固化在边缘节点缓存里的旧响应,不是实时回源生成的
  • 301的Location头指向https://www.example.com的资源地址,同时Server头标识后端为Apache,说明这个301最初是源站的强制跳转规则生成的,被CloudFront缓存后持续对外返回
分步解决操作

1. 优先清理已被缓存的错误301响应

CloudFront默认会缓存301类重定向响应,不先清理缓存的话,后续修改配置不会生效:

  • 进入对应CloudFront分发的控制台配置页,打开「失效」标签栏
  • 输入出问题的资源路径前缀(比如/vendor/bootstrap/css/*)提交失效请求,等失效状态完成后再测试资源加载
    注意:仅失效出问题的路径即可,不要提交全路径/*的失效请求,避免不必要的缓存重建损耗

2. 修正源站Apache的跳转规则,切断301触发源

源站的重定向规则是301的最初来源,需要匹配CloudFront的回源配置调整规则:

  • 先确认CloudFront的回源Host头配置:进入分发配置的「源站」标签页,查看对应源站的「源站请求策略」中,Host头是否设置为回源使用的原始域名。如果是这种情况,Apache会默认触发本身绑定的非www转www的站点跳转规则,导致回源请求被301拦截
  • 两种调整方案二选一即可:
    1. 把CloudFront回源的Host头修改为www.example.com,这样回源时Apache收到的Host头完全匹配站点配置,不会触发跳转
    2. 在Apache的站点配置中增加判断逻辑:当请求Host为CloudFront回源使用的原始域名时,跳过所有强制域名跳转、HTTP转HTTPS的规则
  • 额外检查回源协议配置:如果CloudFront当前用HTTP协议回源到Apache,而Apache配置了强制HTTP跳转HTTPS的规则,也会直接返回301。这种情况要么把CloudFront的回源协议改为「仅HTTPS」,要么在Apache规则中对回源请求跳过HTTP转HTTPS的校验。

3. 调整CloudFront缓存策略,避免同类问题复发

  • 进入分发配置的「行为」标签页,编辑对应资源路径的缓存策略
  • 调低301、302类重定向响应的默认缓存TTL,可直接设置为不缓存这类重定向响应,避免后续源站出现临时配置错误时,错误的301被长期缓存
  • 如果你本来就希望用CloudFront的默认域名对外提供静态资源服务,需要彻底移除源站的强制域名跳转规则,否则后续缓存过期回源时,仍会拿到301响应

内容的提问来源于stack exchange,提问作者The Fair Technology

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 19:15:04