应结合服务器配置(如.htaccess)、目录权限、robots.txt等多层防护,核心是让爬虫“看不到、进不去、不敢抓、没法执行”;推荐将上传目录移出Web根目录,用PHP中转文件访问,并在.htaccess中精准拦截爬虫对/uploads等路径的请求。

直接禁止爬虫访问上传目录,不能只靠 PHP 代码拦截请求——因为爬虫不执行 PHP,它只发 HTTP 请求并接收响应。真正有效的方式是结合服务器配置(如 .htaccess 或 Nginx 规则)+ 目录权限 + robots.txt 多层防护,核心目标是:让爬虫“看不到、进不去、不敢抓、没法执行”。
用 .htaccess 精准拦截爬虫对上传目录的请求
适用于 Apache 环境,在网站根目录的 .htaccess 文件中,将以下规则插入在 # BEGIN WordPress(或类似 CMS 主重写块)之前:
-
RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|baiduspider|yandexbot) [NC]—— 只匹配主流搜索引擎爬虫,不误伤正常用户; -
RewriteRule ^(uploads|upload|files)(?:$|/) - [F]—— 精确匹配/uploads/、/uploads、/uploads/image.jpg,但不会匹配/uploads-old/或/myuploads/; - 若上传目录实际路径是
/wp-content/uploads/,则正则改为^wp-content/uploads(?:$|/); - 确保该规则位置正确:必须在 WordPress 或其他 CMS 的主 RewriteRule 块之前,否则会被跳过。
把上传目录移出 Web 可访问范围(最安全)
比“拦住爬虫”更彻底的做法是:让它根本无法通过 URL 访问。
- 不要把上传目录放在
/var/www/html/uploads/这类 Web 根目录下; - 改放到 Web 根目录之外,例如:
/var/www/uploads/(与/var/www/html/同级); - PHP 脚本仍可通过绝对路径读写该目录(如
move_uploaded_file($tmp, '/var/www/uploads/photo.jpg')); - 用户下载文件时,用 PHP 中转:通过
readfile()+ 正确 header 输出,避免暴露真实路径。
配合 robots.txt 和 HTTP 头双重声明
虽不能强制所有爬虫遵守,但对合规爬虫(Google、Bing、百度等)是必要且有效的提示:
立即学习“PHP免费学习笔记(深入)”;
- 在网站根目录创建或更新 robots.txt,加入:
User-agent: *<br>Disallow: /uploads/<br>Disallow: /upload/<br>Disallow: /files/
- 若上传目录下的某些 PHP 页面(如缩略图生成脚本)需运行,但内容不可索引,可在对应 PHP 文件开头加:
header('X-Robots-Tag: noindex, nofollow'); - 注意:robots.txt 是公开文件,勿在此泄露敏感路径名(如不要写
Disallow: /uploads/2026_secret/)。
禁用上传目录内的脚本执行(防 Webshell)
即使爬虫进不去,也要防万一:上传的 .php 文件绝不能被直接执行。
- Apache 下,在上传目录内新建一个 .htaccess,内容为:
php_flag engine off<br>RemoveHandler .php .phtml .php3 .php4 .php5 .php7<br>RemoveType .php .phtml .php3 .php4 .php5 .php7
- Nginx 下,在 server 或 location 块中添加:
location ~ ^/uploads/.*\.(php|php5|phtml)$ { deny all; } - 同时确保上传目录权限为
755,所有者为 web 用户(如www-data),而非777。



















