Apache不直接禁止爬虫访问PHP页面,而是通过User-Agent识别、Referer与路径组合判断、上传目录禁用PHP解析、robots.txt引导等四重机制精准拦截恶意请求。

Apache本身不直接“禁止爬虫访问PHP页面”,而是通过识别请求特征(如User-Agent、Referer、访问频率、路径行为等),结合访问控制机制,对可疑爬虫发起的PHP页面请求实施拦截。关键不是针对“.php”后缀本身,而是判断谁在请求它、怎么请求、请求什么。
一、用User-Agent精准拦截恶意爬虫UA
多数低质量爬虫会暴露特征UA,可利用SetEnvIfNoCase标记并拒绝:
- 在虚拟主机或
<directory></directory>块中添加:
SetEnvIfNoCase User-Agent "(ahrefsbot|semrushbot|python-requests|go-http-client|sqlmap|nikto|masscan|ltx71)" BADBOT
SetEnvIfNoCase User-Agent "(Baiduspider|Googlebot|YandexBot|Bingbot)" GOODBOT
Order Allow,Deny
Allow from all
Deny from env=BADBOT
Allow from env=GOODBOT
注意:Apache 2.4+推荐改用RequireAll语法,但上述写法兼容性更广;务必排除主流搜索引擎,避免SEO受损。
二、限制敏感PHP路径+空Referer组合访问
很多扫描器(如暴力爆破工具)会直接请求/wp-login.php、/admin/index.php等,且Referer为空。可双条件联动封禁:
立即学习“PHP免费学习笔记(深入)”;
- 添加环境变量标记:
SetEnvIfNoCase Referer "^-$" EMPTY_REFERER
SetEnvIf Request_URI "(wp-login\.php|xmlrpc\.php|/admin/|/api/.*\?id=|/user/login)" SENSITIVE_PHP
SetEnvIfExpr "env('EMPTY_REFERER') && env('SENSITIVE_PHP')" BAD_REQUEST
- 再配合:
Deny from env=BAD_REQUEST
该规则不拦正常用户点击跳转(有Referer),只阻断脚本直刷敏感PHP入口的行为。
三、禁止非必要目录执行PHP(尤其上传目录)
上传目录(如/upload、/images)若允许执行PHP,极易被上传Webshell。应彻底禁用PHP解析:
- 在站点配置中明确关闭PHP引擎:
php_admin_flag engine off
Require all denied
这样即使攻击者上传了shell.php,Apache也不会解析执行,只会返回403或源码(若未禁目录浏览,则返回404)。
四、配合robots.txt与HTTP状态码引导规范爬虫
虽然不能强制阻止恶意爬虫,但对合规爬虫是重要信号:
- 根目录放
robots.txt,示例:
User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /includes/
Disallow: /config.php
Allow: /public/
- PHP脚本内部也可主动返回403或429(Too Many Requests)增强语义,例如检测高频请求后:
http_response_code(429); die('Rate limited');
不复杂但容易忽略



















