このルールをhtaccessファイルに入れて、403を返す空のリファラーを拒否します
SetEnvIfNoCase Referer "^$" bad_user
Deny from env=bad_user
ログを見ることができますが、空のリファラーとしても機能しているGooglebotも拒否しています。 Googlebotのアクセスを許可し、残りの空のリファラーをすべて拒否するようにルールを変更する方法はありますか?
を使用して1つのリファラーwww.example.com
をブロックしました
RewriteCond %{HTTP_REFERER} example\.com [NC]
RewriteRule .* - [F]
403を返しますが、example.com/another_page
から参照している場合はどうでしょうか。
だから私はこれをやった:
RewriteCond %{HTTP_REFERER} example\.com [NC,OR]
RewriteCond %{HTTP_REFERER} example/another_page\.com/
RewriteRule .* - [F]
それが正しいか?
このユーザーエージェントをブロックするにはどうすればよいですか:Mozilla/5.0/Firefox/42.0 - nbertaupete95(at)gmail.com
?ルールはどのように見えるべきですか?これは機能しますか?
RewriteCond %{HTTP_USER_AGENT} ^nbertaupete95(at)gmail.com [NC]
RewriteRule .* - [F,L]
発見した(およびコメントで警告された)ように、空のReferer
ヘッダーを含む要求をブロックしようとしないでください。 Google(およびほとんどのボット)と多くの正当なユーザーはHTTP Referer
ヘッダーを送信しません(少なくともある時点で)ので、これは問題を引き起こすだけです。
質問の残りの2つのクエリに回答するには...
を使用して1つのリファラー
www.example.com
をブロックしましたRewriteCond %{HTTP_REFERER} example\.com [NC] RewriteRule .* - [F]
403を返しますが、
example.com/another_page
から参照している場合はどうでしょうか。
既存のディレクティブを変更する必要はありません。最初のRewriteCond
ディレクティブは、単純に含むexample.com
のリファラーをすでにブロックしています。 example\.com
は正規表現(正規表現)であることに注意してください(これがドットがバックスラッシュでエスケープされる理由です)。 anchorsがない場合、パターンはHTTP_REFERER
内のどこでも自然に一致します。
(ただし、追加のディレクティブexample/another_page\.com/
の-パターンは少しマッシュであるため、意図したとおりに一致することはありません。それは問題ではありません。とにかく最初のconditionにマッチします。)
このユーザーエージェントをブロックするにはどうすればよいですか:
Mozilla/5.0/Firefox/42.0 - nbertaupete95(at)gmail.com
?ルールはどのように見えるべきですか?これは機能しますか?RewriteCond %{HTTP_USER_AGENT} ^nbertaupete95(at)gmail.com [NC] RewriteRule .* - [F,L]
いいえ、これは機能しません。正規表現は正しくありません。正規表現で文字列の開始anchor(^
)を導入したため、start "nbertaupete95 ..."のユーザーエージェントのみに一致します。指定されたユーザーエージェント文字列では、この部分文字列は内に含まれる itです。
また、括弧((
および)
)は正規表現の特別なメタ文字です。これらはalternationおよびサブパターンをキャプチャするために使用されます。リテラルの括弧と一致させるには、これらをバックスラッシュでエスケープする必要があります。 \(
。
したがって、代わりに次のような例を読む必要があります。
RewriteCond %{HTTP_USER_AGENT} nbertaupete95\(at\)gmail\.com
RewriteRule .* - [F]
L
フラグを使用する場合、F
フラグは必要ありません(暗黙的です)。 _CondPattern_
のNC
フラグも不要です。ただし、このユーザーエージェントが実際に大文字と小文字の違いを持っている場合を除きますか?また、ドットは、以前のディレクティブで行ったように、リテラルドットと一致するようにエスケープする必要があります。
指定されたユーザーエージェントでは、「メールアドレス」はユーザーエージェントの最後にあります。この場合は、文字列の終わりanchor($
)を正規表現に追加できます(例:nbertaupete95\(at\)gmail\.com$
)。