apache可通过rewritecond匹配ip并配合rewriterule实现重定向、返回403/410等干预,适用于临时阻断恶意爬虫;需注意cdn下应改用x-forwarded-for,ipv6需规范匹配,高频拦截建议优先用防火墙。
apache 可以用 rewritecond 配合 rewriterule 实现对特定 ip 的访问干预,比如重定向、返回错误或屏蔽请求。这不是真正的“封禁”,而是基于请求来源 ip 做条件判断后执行重写动作,适合快速响应恶意爬虫、异常采集等场景。
用 RewriteCond 匹配 IP 并跳转到其他页面
在站点根目录的 .htaccess 文件(或虚拟主机配置中)添加如下规则:
-
RewriteEngine On必须开启 -
RewriteCond %{REMOTE_ADDR} ^123\.123\.123\.123$ [NC]匹配单个 IPv4 地址(注意点号要转义) -
RewriteRule ^(.*)$ https://www.baidu.com/ [R=302,L]将该 IP 所有请求重定向到百度首页
若需匹配多个 IP,可用 [OR] 连接条件:
RewriteCond %{REMOTE_ADDR} ^123\.123\.123\.123$ [NC,OR]RewriteCond %{REMOTE_ADDR} ^124\.124\.124\.124$ [NC]RewriteRule ^(.*)$ /blocked.html [R=302,L]
用 RewriteCond 返回 403 或 404 状态码
不跳转,直接拒绝响应,更隐蔽且节省资源:
RewriteCond %{REMOTE_ADDR} ^203\.203\.203\.203$-
RewriteRule ^ - [F]——[F]表示返回 403 Forbidden -
RewriteRule ^ - [G]——[G]表示返回 410 Gone(适合已下线内容)
注意:[F] 和 [G] 后无需路径,- 表示不改写 URI。
配合 User-Agent 或 Referer 做复合判断
单靠 IP 不够精准时,可叠加其他条件防误伤:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteCond %{REMOTE_ADDR} ^192\.168\.100\.50$RewriteCond %{HTTP_USER_AGENT} ^python-requests.*$ [NC]RewriteRule ^(.*)$ - [F]
这样只拦截来自该 IP 且 User-Agent 是 python-requests 的请求,不影响浏览器正常访问。
注意事项和常见问题
IP 获取准确性:如果网站前置了 CDN 或反向代理,%{REMOTE_ADDR} 拿到的是 CDN 节点 IP,不是真实访客 IP。此时需启用 mod_remoteip,并设置 RemoteIPHeader X-Forwarded-For,再改用 %{HTTP_X_FORWARDED_FOR} 判断。
IPv6 支持:RewriteCond 默认支持 IPv6 字符串匹配,如 RewriteCond %{REMOTE_ADDR} ^2001:db8::1$,但正则需更严谨(建议用 CIDR 匹配工具预处理)。
性能影响:每条 RewriteCond 都会增加请求解析开销。高频访问 IP 建议优先用 <require></require> 或防火墙(如 iptables / firewalld)拦截,Rewrite 更适合临时、小范围、带逻辑的干预。










