在特定目录上阻止爬虫

blocking crawlers on specific directory

我的情况类似于 a previous question,在接受的答案中使用以下内容:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|Baiduspider) [NC]
RewriteRule .* - [R=403,L]

上面 URL 提供的规则似乎阻止访问所有内容(包括主页级别)

我真正需要的是阻止访问我指定的目录(/tbd_templates//custom_post/ 等,状态代码为 403)但允许访问站点结构的其余部分。

我的.htaccess是:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

谁能帮帮我?

RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|Baiduspider) [NC]
RewriteRule .* - [R=403,L]

如链接答案中所述,此代码需要放入您要保护的目录内的 .htaccess 文件中 - 以便它仅适用于该目录中的所有内容(由 .* 正则表达式).

但是,如果您需要保护多个目录,那是不切实际的。在这种情况下,您应该更改 RewriteRule 模式 以针对您要保护的特定子目录(在链接的答案中提到,但没有给出示例)。

例如,以下需要在 before WordPress 代码块(即 before the # BEGIN WordPress 评论标记). (您不需要重复 RewriteEngine 指令,该指令已在文件中 之后 出现。)

RewriteCond %{HTTP_USER_AGENT} (googlebot|bingbot|Baiduspider) [NC]
RewriteRule ^(tbd_templates|custom_post)($|/) - [F]

RewriteRule 指令的第一个参数( 模式)是一个 regular expression 匹配请求的 URL-path,减去斜杠前缀。

正则表达式 ^(tbd_templates|custom_post)($|/) 匹配 /tbd_templates/custom_post(使用正则表达式 交替 )或 /tbd_templates/<anything>/custom_post/<anything>.

F 标志是 R=403 的缩写。这里不需要 L 标志,它在使用 F(或 R=403)时隐含。