Apache RewriteCond规则!-f与!-d作用的技术咨询
关于Apache Rewrite规则中!-f和!-d的作用解析
先明确这两个条件的核心作用:它们是服务器端的存在性检查,不会去访问爬虫请求的页面,仅做本地文件系统的判断:
%{REQUEST_FILENAME} !-f:判断当前请求的路径对应的不是一个真实存在的文件(!表示否定,-f是Apache内置判断符,用于检测路径是否为文件)%{REQUEST_FILENAME} !-d:判断当前请求的路径对应的不是一个真实存在的目录(-d是检测路径是否为目录)
结合你给出的规则,整体逻辑是:
当请求的User-Agent是ClaudeBot或Bytespider时,同时满足「请求路径不存在对应文件」且「请求路径不存在对应目录」,才会触发Rewrite规则,把请求转发到/bots.php。
举两个实际场景例子:
- 如果爬虫请求
/index.html,而这个文件真实存在,那么!-f条件不成立,规则不会触发,爬虫正常访问/index.html - 如果爬虫请求
/fake-page,服务器上既没有这个文件也没有这个目录,两个条件都满足,请求会被转发到/bots.php
你的完整规则代码:
<IfModule mod_rewrite.c> RewriteCond %{HTTP_USER_AGENT} ClaudeBot [NC,OR] RewriteCond %{HTTP_USER_AGENT} Bytespider RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /bots.php [L] </IfModule>
内容的提问来源于stack exchange,提问作者MrK
相关产品推荐
相关产品推荐

