Cloudflare环境下首页RewriteRule不生效:{REQUEST_URI}问题求助
首页重定向失效的解决方案
问题根源
Apache的mod_dir模块会优先处理首页请求(自动将/映射到index.php等默认首页文件),导致你的Rewrite规则在内部重写后才执行,错过了触发时机。另外原规则中HTTP_HOST的匹配缺少转义,可能存在误匹配风险。
修正后的.htaccess配置
替换现有规则为:
# 墨西哥用户重定向到.mx域名 RewriteCond %{HTTP:CF-IPCountry} ^MX$ RewriteCond %{HTTP_HOST} !\.mx$ RewriteRule ^(.*)$ http://domain.mx/$1 [R=301,L,QSA] # 加拿大用户重定向到.ca域名 RewriteCond %{HTTP:CF-IPCountry} ^CA$ RewriteCond %{HTTP_HOST} !\.ca$ RewriteRule ^(.*)$ http://domain.ca/$1 [R=301,L,QSA]
核心修改说明
- 用
^(.*)$替代原规则的^,通过捕获组匹配所有路径(包括空的首页路径),再用$1拼接目标URL,避免%{REQUEST_URI}受mod_dir内部重写的影响 - 给
HTTP_HOST匹配规则中的.加上转义符\,确保仅匹配以.mx/.ca结尾的域名,避免误匹配类似amx.com的域名 - 目标域名后添加
/再拼接$1,保证首页请求会正确重定向到domain.mx/,符合URL规范
测试注意事项
- 测试前务必清除浏览器缓存,301重定向会被浏览器持久缓存
- 确认Cloudflare的
CF-IPCountry请求头已正确传递到服务器(可通过查看服务器日志或phpinfo验证) - 将这些重定向规则放在所有其他Rewrite规则的最顶部,防止被其他规则提前拦截
内容的提问来源于stack exchange,提问作者user77619
相关产品推荐
相关产品推荐

