我正在尝试使用.htaccess将机器人/不需要的客户端重定向到errorpage。 但在任何连接上它只带来“RewriteCond:Bad flag delimiters”
htaccess的:
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阻止用户代理
deny from env=block
SetEnvIfNoCase User-Agent "USER-AGENT" block=yes
但这不是我想做的方式,因为你只是得到一个空页面而没有消息为什么
答案 0 :(得分: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"