Rewritecond - 坏标记分隔符.htaccess(Apache)

时间:2013-01-27 15:14:27

标签: apache .htaccess mod-rewrite delimiter

我正在尝试使用.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

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

1 个答案:

答案 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"