如何将网站非www版本重定向到www版本,避免CloudFront重定向循环?
解决CloudFront与源站重定向循环问题
方案一:修改源站.htaccess规则,排除CloudFront请求
问题核心是CloudFront访问源站时,会被源站的重定向规则指向www域名,而www域名又指向CloudFront,形成循环。我们可以通过判断请求是否来自CloudFront,跳过重定向逻辑。
CloudFront向源站发起请求时,会自动添加X-Amz-Cf-Id请求头,利用这个特征修改.htaccess规则:
<IfModule mod_rewrite.c> RewriteEngine On # 仅对非CloudFront的请求执行重定向 RewriteCond %{HTTP_HOST} ^oasisdigital.com.ar [NC] RewriteCond %{HTTP:X-Amz-Cf-Id} ^$ RewriteRule ^(.*)$ https://www.oasisdigital.com.ar/$1 [L,R=301] </IfModule>
规则说明
%{HTTP:X-Amz-Cf-Id} ^$:判断请求头中是否没有X-Amz-Cf-Id,即请求不是来自CloudFront- 只有普通用户直接访问
oasisdigital.com.ar时,才会触发301重定向到www版本;CloudFront的源站请求会跳过该规则,避免循环
方案二:在CloudFront层面直接处理重定向(推荐)
将重定向逻辑从源站转移到CloudFront,彻底避免源站与CDN的循环问题:
- 登录CloudFront控制台,找到目标分发
- 进入行为标签,编辑默认行为(或对应路径的行为)
- 在重定向行为区域,选择「重定向到另一个域名」
- 配置参数:
- 目标域名:
www.oasisdigital.com.ar - 协议:选择「匹配查看器」或「HTTPS」(建议用HTTPS)
- 状态码:选择
301(永久重定向)
- 目标域名:
- 添加条件:在缓存键和源请求的条件中,添加规则:当
HTTP主机头等于oasisdigital.com.ar时触发该重定向
优势
- 重定向在CDN边缘节点完成,减少源站请求量
- 从根源上避免循环,逻辑更清晰
注意事项
- 若使用方案一,确保CloudFront源站配置的「源域名」为
oasisdigital.com.ar,且未强制修改请求的Host头为www版本 - 301重定向会被浏览器缓存,测试时请使用隐私窗口或清除浏览器缓存
内容的提问来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

