如何通过htaccess将特定IP地址的请求重定向至其他站点?
问题分析与解决方案
你的配置核心问题是多RewriteCond默认采用AND逻辑,这意味着只有请求同时来自两个指定IP才会触发重定向,显然不符合需求。另外规则顺序也需要调整,确保IP判断优先执行。
正确配置代码
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 匹配指定IP,触发重定向 RewriteCond %{REMOTE_ADDR} ^xxx\.xxx\.xxx\.xxx$ [OR] RewriteCond %{REMOTE_ADDR} ^xxx\.xxx\.xxx\.xxy$ RewriteRule ^ https://example.com [L,R=302] # 其他IP请求,转发到index.php(排除已存在的文件/目录/软链接) RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^ index.php [L] </IfModule>
关键修改说明
- OR逻辑连接IP条件:在第一个IP的
RewriteCond末尾添加[OR],表示两个IP满足任意一个即可触发重定向。 - IP规则前置:将IP重定向规则放在最前面,确保匹配到指定IP时直接执行重定向,不再处理后续规则。
- 正则转义:IP中的
.需要用\.转义,否则正则会将.识别为“任意字符”,导致错误匹配。 - 明确重定向状态码:添加
R=302表示临时重定向,若需永久重定向可改为R=301。
验证注意事项
- 确认服务器已启用
mod_rewrite模块。 - 测试前清除浏览器缓存,避免旧重定向缓存干扰结果。
- 可通过服务器日志查看
%{REMOTE_ADDR}输出,确认请求IP是否被正确识别。
内容的提问来源于stack exchange,提问作者BTSM
相关产品推荐
相关产品推荐

