2

.htaccess を使用して、ボット/不要なクライアントをエラーページにリダイレクトしようとしています。しかし、どの接続でも、「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 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 でヘッダー関数を使用して正しいヘッダーを送信できます。

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

PHP を使用していない場合は、perl、python、ruby などを使用できます。この場合、ヘッダーの送信をApacheに依存するのではなく、スクリプトからヘッダーを送信することが重要です。

編集:

あなたはすでにこれを試しているので、1 つまたは複数のルールに何らかの隠しコントロール文字があると思います。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 に答える