htaccessやconfの設定で直リンクを防ぐ
あるディレクトリの画像ファイルへの直リンクを禁止したい場合どのような方法があるのだろうか。本エントリーで禁止する直リンクとは以下のようなものを指す。
<img src="http://kaihatsu.urlurl.com/img/300x250.gif" alt="test" />
<a href="http://kaihatsu.urlurl.com/img/300x250.gif">画像</a>
上のような画像を表示するタグと画像へのダイレクトなリンクからのアクセスを禁止したい。具体的には、それらのアクセスに対して403エラーを返す。
やり方
静的な画像だけでなく動的に生成した画像の直リンクも禁止したい。PHPなどで動的に生成された画像で拡張子が付いていない場合にはディレクトリ単位で禁止設定を行うことができる。
ディレクトリ単位
LocationディレクィブでURLのマッチング処理を行うことが可能で、特定のURLに対して異なった処理を行うことができる。
<Location ~ "/(images|img)/"> SetEnvIf Referer "^http://kaihatsu\.urlurl\.com" NotDirect SetEnvIf Referer "^$" NotDirect order deny,allow deny from all allow from env=NotDirect </Location>
上の例は、images及びimgという階層を含むURLの場合に直リンク禁止設定を行うconfの書き方。apacheのディレクティブはLocation以外にも複数存在し、以下のURLで確認できる。
http://httpd.apache.org/docs/2.2/ja/configuring.html#scope
ファイル単位
ディレクトリ単位ではなくファイル単位で禁止設定を行うことも可能。
<Files ~ "\.(gif|png|jpg)$"> SetEnvIf Referer "^http://kaihatsu\.urlurl\.com" NotDirect SetEnvIf Referer "^$" NotDirect order deny,allow deny from all allow from env=NotDirect </Files>