web-dev-qa-db-ja.com

.htaccessを使用して、クエリ文字列を含むURLの403禁止ステータスで応答するにはどうすればよいですか?

一部のボットは、次で終わるリンクごとにサイトをクロールしています:

?utm_source=dlvr.it&utm_medium=Twitter

IPをチェックアウトしていません。

次に、他のボット(10+)がリンクルール?utm_source=dlvr.it&utm_medium=Twitterに従い、サイトをクロールします。これにより、大量のトラフィックが発生し、サイトがシャットダウンします。サイトにアクセスするときに、HTTP 403ステータスコードを使用して、10個以上の他のボットをブラックリストに追加しました。

しかし、最良の方法は、次で終わるすべてのリンクについて、私のサイトをクロールした最初のボットを見つけることです。

?utm_source=dlvr.it&utm_medium=Twitter

または、URLに次が含まれる場合、HTTP 403リダイレクトステータスコードを使用します。

?utm_source=dlvr.it&utm_medium=Twitter

次のような。htaccessコードを追加して、誰かがxmlrpc.phpページをクロールできないようにするコードを追加する方法を知っています。

<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

しかし、URLのクエリはどうでしょうか?

5
space and time

mod_rewriteモジュールがインストールされている場合、これをWebサイトのルートフォルダー(通常はpublic_htmlフォルダー)の。htaccessファイルに配置できます。 ):

RewriteEngine On
RewriteRule ^\?utm_source\=dlvr.it\&utm_medium\=Twitter$ - [R=403,NC,L]

\から=を削除する必要があるかもしれませんが、equalsをエスケープする必要があるかどうかは思い出せません。

URLの任意の場所で文字列を検索する場合、別の方法は次のようになります。

RewriteEngine On
RewriteRule ^(.*)\?utm_source\=dlvr.it\&utm_medium\=Twitter(.*)$ - [R=403,NC,L]

末尾のNCは大文字と小文字が区別されないことを意味するため、テキストがすべて大文字の場合、ボットはエラー403にリダイレクトされます。

4
Mike

?utm_source = dlvr.it&utm_medium = Twitter

utm_sourceおよびutm_mediumは、キャンペーンを監視するためにGoogleアナリティクス(および場合によっては他のトラッカー)で使用されるため、このクエリ文字列で純粋にアクセスをブロックしても「正しい」とは言えません。 OK.

クエリ文字列で実現する重要なポイントは、mod_rewriteのRewriteRuleのみを使用して(またはmod_setenvifでRequest_URI変数を使用して-コメントで示唆されているように)一致できないことです。クエリ文字列はURLパスから削除されますbeforeRewriteRuleパターンと照合されます。

書き換えエンジン(mod_rewrite)がまだ有効になっていない場合は有効にします。

RewriteEngine On

RewriteCondディレクティブを使用する必要があります。したがって、上記のクエリ文字列に一致するすべてのリクエストに対して「403 Forbidden」を提供するには、次のようなものを使用できます。

RewriteCond %{QUERY_STRING} =utm_source=dlvr.it&utm_medium=Twitter
RewriteRule .* - [F]

これは、指定されたクエリ文字列に対するexactの一致です(正規表現ではないため、dotをエスケープする必要はありません)。 Lフラグを指定する場合、Fフラグは必要ありません(暗黙的です)。 (FR=403の省略形です。)

制限を緩和し、上記のクエリ文字列で始まるすべてのクエリ文字列と一致させる必要がある場合は、正規表現を使用します。

RewriteCond %{QUERY_STRING} ^utm_source=dlvr\.it&utm_medium=Twitter
RewriteRule .* - [F]

NCNOCASE)フラグを使用して、大文字と小文字を区別しない正規表現を作成することもできます。ただし、一致するケースを明確に無視する場合にのみ、これを使用します。人々はこのフラグを習慣から追加する傾向がありますが、多くの場合、それは不必要であり(時には正しくないこともあります)、正規表現エンジンの動作を少し難しくします。

すべてのリクエストが処理されるため、これは特に効率的ではありません。たとえば、/path/to/filesパス内のURLのみを対象とする場合、RewriteRuleパターンをより制限的にすることができます。

RewriteRule ^path/to/files/ - [F]
3
MrWhite