最有效方法是在 apache 层面用 .htaccess 拦截爬虫,匹配主流爬虫 ua 并禁止访问 /admin 等路径,返回 403;辅以 robots.txt 声明和 php 层会话校验,注意 ua 可伪造、需禁用目录浏览并清除缓存验证。

直接在 Apache 层面拦截最有效,不依赖 PHP 执行,响应快且不消耗脚本资源。重点是区分“禁止爬虫访问”和“禁止所有人访问”——后台目录通常需保留管理员登录入口,只屏蔽自动化抓取行为。
用 .htaccess 精准拦截主流爬虫
将以下规则插入网站根目录的 .htaccess 文件中,放在 # BEGIN WordPress 或其他重写区块之前:
RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|baiduspider|yandexbot|duckduckbot) [NC]RewriteRule ^(admin|wp-admin|backend|private|system)(?:$|/) - [F]
说明:
– 第一行匹配常见搜索引擎爬虫(大小写不敏感);
– 第二行用 ^ 锚定路径开头,(?:$|/) 确保只命中 /admin 或 /admin/,不误伤 /admin-api 或 /myadmin;
– [F] 返回 403 Forbidden,语义明确,无需额外跳转。
配合 robots.txt 做双重声明
在网站根目录放置 robots.txt,内容示例:
User-agent: *Disallow: /admin/Disallow: /wp-admin/Disallow: /backend/Sitemap: https://example.com/sitemap.xml
注意:这仅对遵守协议的爬虫生效(如 Google、Bing),但它是 SEO 友好的基础层,与 .htaccess 规则互补——前者是“礼貌提醒”,后者是“硬性拦截”。
PHP 层补充校验(按需启用)
若需更细粒度控制(例如仅封禁非登录状态下的爬虫请求),可在后台入口文件(如 admin/index.php)顶部加入:
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';if (preg_match('/bot|spider|crawl/i', $ua) && !isset($_SESSION['admin_logged_in'])) {http_response_code(403);die('Access denied');}
该方式依赖会话状态,适合已有登录体系的后台,避免影响已登录管理员的正常操作。
关键注意事项
– 不要仅靠 User-Agent 屏蔽做安全防线:它可被轻易伪造,仅适用于 SEO 场景下的内容隔离;
– 后台目录本身应禁用目录浏览(确保 Apache 配置中 Options -Indexes 已启用);
– 修改后用 curl -A "Baiduspider" https://yoursite.com/admin/ 验证是否返回 403;
– CDN 或缓存插件可能缓存响应,测试前请清空所有层级缓存。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











