一般的な「悪者」、つまり他の人の帯域幅を使用する傾向のあるユーザーがいるサイトからリンクされている場合、サーバー上の画像へのアクセスをブロックしようとしています。
私の質問を他の質問と区別するものが2つあります この質問 と その質問 :
Apache.confにRewriteRulesを含めようとしましたが、何もしません。また、SetEnvに応じてリダイレクトできるオプションはないようです。
助言がありますか?
画像がホットリンクされていなくても、デフォルトのエラー403ドキュメントが変更されたままになるため、あまり美しくなくても解決策があります。
これはApache2.confに入ります:
SetEnvIfNoCase Referer "livejournal.com" hotlink
<FilesMatch ".(gif|jpg|jpeg|png)$">
ErrorDocument 403 /server404/no_hotlink.php
</FilesMatch>
<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi|flv)$">
deny from env=hotlink
</FilesMatch>
Alias /server404 "/var/www/_404"
<Directory "/var/www/_404">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
しばらくの間、サーバー全体の404エラードキュメントに/ server404パスを使用していたので、すでにそれを使用していました。 403やGlobalNoHotlinkなどの名前を付けることもできます。
画像(最初のFilesMatch)の場合、「禁止された」ErrorDocumentを/ server404ディレクトリのPHPファイルに設定します。次に、それがホットリンクされているかどうかを確認します(ビデオファイルの場合も同様です。 2つのFilesMatchタグ)、ホットリンクされている場合はアクセスを禁止します。
これは/var/www/_404/no_hotlink.phpに入ります-PHPファイルは禁止された画像で呼び出されます:
<?PHP
$file = dirname(__FILE__) . '/_default/no_hotlink.png';
header('HTTP/1.1 200 OK', true, 200);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header('Content-length: ' . filesize($file));
header('Content-type: image/png');
readfile($file);
?>
それは機能しますが、私が望むほど美しくはないので、他の解決策についてはまだ満足しています。
Httpd.confに次のようなものがあります。
RewriteCond "%{HTTP_REFERER}" !=""
RewriteCond "%{HTTP_REFERER}" "!^http://www.mydomain.com/.*$" [NC]
RewriteRule "\.(jpg|png)$ - [F]
以前にRewriteCondsとRewriteRulesを使用したことがない場合は、これも使用する必要があります。
RewriteEngine On
グーグルまたはApacheクックブックで見つけました。もう思い出せない。