Mod_setenvifを備えたApache2があります。私の目標は、私のglobal Apache.conf内の画像のすべてのホットリンクを停止することです。現在それは:
<FilesMatch ".(gif|jpg|jpeg|png)$">
SetEnvIfNoCase Referer "^http://[^/]*blogger.com/" hotlink
SetEnvIfNoCase Referer "^http://[^/]*myspace.com/" hotlink
SetEnvIfNoCase Referer "^http://[^/]*ebay" hotlink
...
deny from env=hotlink
</FilesMatch>
これまでのところうまく機能しますが、すべてのホットリンカーを一度キャッチして、構成に追加する必要があります。次のようなものを追加して、より幅広いアプローチを取りたいと思います。
# Set variable "hotlink" if Referer contains "forum"
SetEnvIfNoCase Referer "forum" hotlink
# Unset variable if Referer is from the same Host as current request
SetEnvIfNoCase Referer %{Host} !hotlink
計画は一致するhttp:// evilhost。com/forum /ですが、一致しませんhttp:// myhost。com/forum /。
問題は、後者の未設定が機能しないことです。ヘッダープロパティ「Host」を正規表現パターンとして使用できないように見えます-少なくとも私が試した方法ではありません。もちろん、構成に可能なすべてのホスト名を手動で入力することもできますが、それは避けたいことです。
だから私の質問は:
次のような操作を行うことで、ホットリンクを動的にブロックできます。
RewriteCond "%{HTTP_Host}_%{HTTP_REFERER}" !\.?([^\.]+\.[^\.]+?)_https?://.*\1/.*$ [NC]
RewriteRule .(gif|jpg|jpeg|png)$ . [F,L]
(これはコメントとして始まりましたが、長すぎました...)
あなたの画像は本当にthat多くの異なるローカルホスト名によってアクセスされていますか?ほとんどのサイトでは、個々の仮想ホストが通常2つのホスト名(通常はexample.comやwww.example.comなど)に関連付けられているためです。存在しない問題を解決しようとしていないのですか?
FilesMatchの代わりにmod_rewriteを使用することで、必要なことを実行できる可能性があります(これは、一致文字列で%{HTTP_Host}
を使用できるため、すべてのローカルホスト名を入力する必要がなくなるためです)。単純なグーグル検索は、その多くの異なるローカルホスト名をもたらしますか?ほとんどのサイトでは、個々の仮想ホストが通常2つのホスト名(通常はexample.comやwww.example.comなど)に関連付けられているためです。存在しない問題を解決しようとしていないのですか?
FilesMatchの代わりにmod_rewriteを使用することで、必要なことを実行できる可能性があります(これにより、一致文字列で%{HTTP_Host}を使用できるため、すべてのローカルホスト名を入力する必要がなくなります)。単純なグーグル検索で このサイト が得られます。これは、RewriteRuleを使用してホットリンクをブロックする方法について詳しく説明しています。
私の頭のてっぺんから(例えば、私はまだこれを本当に考えていません)、なぜあなたはあなたの論理を逆にしてみませんか?
<FilesMatch ".(gif|jpg|jpeg|png)$">
SetEnvIfNoCase Referer "^http://[^/]evilhost.com/" localref
Order deny,allow
deny from all
allow from env=localref
</FilesMatch>