基于国家的.htaccess重定向配置问题:出现过多重定向错误
解决基于国家重定向的“过多重定向”错误
问题原因
你的规则会触发无限循环,核心原因是:
- 当用户被重定向到
xyz.co.uk或xyz.com后,目标域名的服务器如果也部署了相同的.htaccess规则,会再次检查地理信息并尝试重定向,形成循环。 - 原规则没有判断当前访问的主机是否已经是目标域名,即使用户处于正确的域名上,仍会触发重定向逻辑。
修改后的.htaccess代码
RewriteEngine On RewriteBase / # 英国用户重定向至xyz.co.uk(仅当当前域名不是xyz.co.uk时执行) RewriteCond %{HTTP_HOST} !^xyz\.co\.uk$ RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UK$ RewriteRule ^(.*)$ https://xyz.co.uk/$1 [R=301,L] # 其他地区用户重定向至xyz.com(仅当当前域名不是xyz.com时执行) RewriteCond %{HTTP_HOST} !^xyz\.com$ RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^UK$ RewriteRule ^(.*)$ https://xyz.com/$1 [R=301,L] # 反向代理规则 RewriteRule ^(.*)?$ 127.0.0.1:3000/$1 [P,L]
关键修改说明
- 添加
%{HTTP_HOST} !^xyz\.co\.uk$和%{HTTP_HOST} !^xyz\.com$的条件,确保只有在当前访问域名不是目标域名时才执行重定向,彻底避免循环。 - 明确指定
https://协议,防止因协议不一致导致的意外跳转或缓存问题。 - 使用
R=301标记永久重定向,让浏览器缓存重定向规则,减少后续请求并提升SEO表现。 - 保留
[L]标记,确保匹配到重定向规则后不再执行后续规则。
额外注意事项
- 确认服务器已正确安装并启用GeoIP模块,否则
%{ENV:GEOIP_COUNTRY_CODE}变量无法获取国家代码,规则会失效。 - 如果需要临时重定向测试,可将
R=301改为R=302,稳定后再切换回301。
内容的提问来源于stack exchange,提问作者navedhn
相关产品推荐
相关产品推荐

