You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.htaccess中结合mod_geoip与mod_rewrite,兼顾区域限制与爬虫权限

解决方案:结合地理IP限制与搜索引擎爬虫白名单

核心思路

直接通过IP白名单限制爬虫不可靠(搜索引擎爬虫IP范围广且动态更新),应通过User-Agent识别+地理IP限制结合的方式:优先放行搜索引擎爬虫,再对普通用户做国家访问限制。

具体.htaccess配置

情况1:使用mod_geoip(旧版GeoIP模块)

RewriteEngine On

# 优先允许主流搜索引擎爬虫访问
RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|slurp|duckduckbot|yandexbot) [NC]
RewriteRule ^ - [L]

# 限制仅比利时(BE)、荷兰(NL)普通用户访问,其他国家跳转至备用站点
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(BE|NL)$
RewriteRule ^ https://your-alternative-site.com [R=302,L]

情况2:使用mod_geoip2(新版GeoIP2模块,更推荐)

若服务器部署的是GeoIP2模块,指令略有调整:

RewriteEngine On

# 允许搜索引擎爬虫
RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|slurp|duckduckbot|yandexbot) [NC]
RewriteRule ^ - [L]

# 地理IP访问限制
RewriteCond %{ENV:GEOIP2_COUNTRY_CODE} !^(BE|NL)$
RewriteRule ^ https://your-alternative-site.com [R=302,L]

关键注意事项

  • 扩展爬虫匹配范围:上述User-Agent列表覆盖主流搜索引擎,若需适配更多爬虫(如苹果生态的applebot),可直接在括号内补充标识。
  • 大小写不敏感匹配:[NC]标记确保忽略User-Agent的大小写差异,避免漏判。
  • 验证搜索控制台访问:配置完成后,在Google搜索控制台使用「URL检查工具」测试实时抓取,确认爬虫可正常获取内容。
  • 确认GeoIP模块生效:可创建测试文件geoip-test.php验证模块运行状态:
<?php
// 旧版mod_geoip用这个
echo $_SERVER['GEOIP_COUNTRY_CODE'];
// 新版mod_geoip2用这个
// echo $_SERVER['GEOIP2_COUNTRY_CODE'];
?>

访问该文件即可查看当前请求的国家代码,确认模块正常工作。

为何IP白名单方案失效?

搜索引擎爬虫(如Googlebot)的IP范围极大且持续动态更新,手动维护白名单无法覆盖所有有效IP,因此通过User-Agent识别是更可靠的方式。若担心User-Agent被伪造,可额外添加IP反向解析验证增强安全性:

# 验证Googlebot的IP反向解析(可选)
RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
RewriteCond %{REMOTE_HOST} !\.googlebot\.com$
RewriteCond %{REMOTE_HOST} !\.google\.com$
RewriteRule ^ - [F,L]

内容的提问来源于stack exchange,提问作者reinout baeckelmans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:01:08