DocumentRoot本身不防爬,但它是防爬规则生效的前提;必须先正确配置绝对路径(结尾无斜杠)、配套<Directory>块启用Require all granted,并指向框架public目录,防爬规则(如UA拦截、Referer验证)才能在其内执行,Alias目录还需单独配置。

DocumentRoot 本身不防爬,但它是防爬规则生效的前提——所有 URL 匹配、User-Agent 检查、Referer 验证都基于请求最终落到的物理路径。必须先让 DocumentRoot 指向正确目录并开放基础权限,防爬规则才能在该目录下起作用。
DocumentRoot 必须先配稳
防爬规则(如 RewriteCond)依赖 Apache 能正常解析请求路径,而路径解析起点就是 DocumentRoot。如果它配置错误,请求甚至无法进入规则匹配阶段,直接返回 403 或 404。
- 路径必须是绝对路径,且结尾不加斜杠(例如 /var/www/myapp/public,不是 /var/www/myapp/public/)
- 对应
块必须包含 Require all granted,否则连基础访问都被拒,防爬规则根本没机会执行 - 若用框架(如 Laravel、ThinkPHP),DocumentRoot 必须指向 public/ 子目录,否则 .htaccess 或重写规则可能失效,导致防爬逻辑被绕过
在 DocumentRoot 对应的 Directory 块里加防爬规则
防爬配置不能只写在全局或虚拟主机顶层,必须嵌套在 DocumentRoot 所指向目录的
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 用 mod_rewrite 屏蔽恶意 UA:在
内写
RewriteEngine On<br>RewriteCond %{HTTP_USER_AGENT} "(Scrapy|Curl|HttpClient|MJ12bot|heritrix)" [NC]<br>RewriteRule ^ - [F]- 用 SetEnvIfNoCase 更轻量(适合低负载):
SetEnvIfNoCase User-Agent "(FeedDemon|AhrefsBot|Python-urllib)" BADBOT<br>Order Allow,Deny<br>Allow from all<br>Deny from env=BADBOT
- 注意:Apache 2.4+ 中 Order/Deny/Allow 已废弃,推荐统一用 Require 表达式 + mod_authz_core,但 SetEnvIfNoCase 仍兼容
Alias 目录要单独防爬
如果用了 Alias 映射上传目录(如 Alias /uploads /srv/uploads),这个路径不在 DocumentRoot 下,原有防爬规则不会自动生效——必须为 Alias 对应的物理路径再写一个独立的
- 例如:
里也要加 RewriteEngine 和 UA 检查 - 否则爬虫直接请求 /uploads/xxx.jpg 就能绕过主站的防爬限制
- 尤其对静态资源目录,建议额外加 Referer 白名单(RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mydomain\.com)
别忘了配合 php.ini 和 PHP 执行权限
有些爬虫会故意触发 PHP 错误页面(如 ?a=)来探测环境。DocumentRoot 下若存在可执行 PHP 的入口,且 php.ini 中 display_errors = On,就可能泄露信息。
- 确保 DocumentRoot 对应的
块中未开启 Options +ExecCGI 或 +Includes(除非真需要) - php.ini 中设 display_errors = Off、expose_php = Off
- 敏感目录(如 config/、storage/)绝不能被 DocumentRoot 或 Alias 暴露,否则防爬再严也无意义

















