2

我正在尝试使用 .htaccess 将机器人/不需要的客户端重定向到错误页面。但在任何连接上,它只会带来“RewriteCond: Bad flag delimiters”

.ht 访问:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} askpeter_bot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Jakarta [NC,OR]
...
RewriteCond %{HTTP_USER_AGENT} Genieo [NC]
RewriteRule ^(.*) "http\:\/\/www\.example\.com\/bots\/notallowed.html" [F]

任何想法可能是什么问题?


编辑:
现在我使用拒绝来阻止用户代理

deny from env=block
SetEnvIfNoCase User-Agent "USER-AGENT" block=yes

但这不是我想要的方式,因为你只是得到一个空页面而没有消息为什么

4

1 回答 1

3

当您使用 [F] 或 [R=403] 标志时,apache 会呈现指定代码的ErrorDocument。您可以使用 ErrorDocument 指令来设置它,如下所示:

ErrorDocument 403 /bots/notallowed.html

在您的情况下,这种方法的问题在于,当发送 403 代码时,它将被用于机器人和人类。

为了将其限制为机器人,我建议如下:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} askpeter_bot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Jakarta [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Genieo [NC]
RewriteRule ^(.*)$ /bots/notallowed.php [L]

然后在 notallowed.php 中,您可以使用 header 函数发送正确的标头:

<?php header("HTTP/1.0 403 Forbidden"); ?>
Go away, bot.

如果你不使用 PHP,你可以使用 perl、python、ruby 等等。关键是从脚本发送标头,而不是在这种情况下依靠 apache 发送它。

编辑:

由于您已经尝试过这个,我认为您的一个或多个规则可能有某种隐藏的控制字符。您可以使用 cat 找到这些:

cat -v .htaccess

如果由于某种原因这不起作用,请尝试使用此 python:

python -c "f = open('.htaccess', 'r'); f.seek(0); file = f.readlines(); print file"
于 2013-02-07T08:37:31.173 回答