web-dev-qa-db-ja.com

RewriteCond:チェックは%{HTTP_REFERER}が%{REQUEST_URI}を含むか等しい

RewriteCondを使用して、Refererに要求されたURIが含まれているかどうかを確認する方法はありますか...

RewriteCond %{HTTP_REFERER} == 'Host.com/' + %{REQUEST_URI} ...

サーファーが同じページにリンクするページ上のリンクをクリックしたかどうかをキャッチし、それに基づいてRewriteRuleを変更する必要があります。

3
mature

はい、これを行うには条件を作成できます(少し奇妙に聞こえますが、ちょっと)...

ユーザーが同じページにリンクしているページのリンクを「クリック」したことを確認するには...つまり、リクエストされたホスト+ URLパスがHTTPリファラーリクエストヘッダーのサブセットであるかどうかを確認するには、次のようにします。 mod_rewriteを使用した次の例condition

RewriteCond %{HTTP_REFERER}@@%{HTTP_Host}%{REQUEST_URI} ^https?://([a-z.-]+/[^?]*)(?:.*)@@\1$

@@は、URLで発生しない単なる文字シーケンスであり、照合しようとしている2つの部分の間の区切り文字として機能します。

CondPattern(regex)は、後方参照(\1)を使用して、RefererパターンでキャプチャされたサブグループがHTTP_Host + REQUEST_URIと一致することを確認します。

サイトがHTTPSのみの場合は、?^https?://を削除できます。

これはHTTP_REFERERにある可能性のあるクエリ文字列を明示的に無視し、URLパスとホスト名のみがチェックされることに注意してください。

HTTPリファラーリクエストヘッダーに関する必須のメモを追加するだけです... 100%信頼できるわけではありません。ユーザーエージェントは、Refererヘッダーを期待どおりに送信しない場合があり、ユーザーがそうしようとすると簡単に偽装されます。

2
MrWhite