画像の直リンクを禁止する
Category
Other
ポータルサイトやブログを運営していると、画像の直リンクに悩まされることがあります。
サイトを参考にしてもらえるのはありがたいのですが、複数のサイトから画像に直リンクを貼られると、サーバーに負荷がかかる原因にもなります。
また、中には「自分で作った画像をそのまま使われるのは...。」「直接参照するのは、画像ではなく記事にして欲しい...。」とお考えの方もいると思います。
そこで、画像の直リンクを禁止して、代替画像を表示する方法を書こうと思います。
Keyword:画像の直リンク禁止,.htaccess,htppd.conf

サーバー上の設定で画像への直リンクを禁止しますので、httpd.confか.htaccessで設定します。apacheサーバーの設定を変更する場合、httpd.confで設定変更することが望ましいのですが、”共用サーバーでも設定可能”といった点を考慮して”.htaccess”での設定手順を記載しようと思います。
もし、サーバーの管理者の方で、”FTPを介して一般ユーザーの方が.htaccessを編集する”といった場合には、予めhttpd.confで以下の設定をしてください。
httpd.conf
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
# AllowOverride None
AllowOverride All
デフォルト設定をコメントアウトし(4行目)、”AllowOverride All”を追記。
一般ユーザーがドキュメントルート以下で.htaacessを使用できるようにします。
次に、ディレクトリにおいてオプション設定を上書きするファイル名を指定し(.htaccess)、”.ht”から始まるファイルのアクセスを禁止します。
httpd.conf
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives. See also the AllowOverride
# directive.
#
AccessFileName .htaccess
#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
AccessFileNameにはオプション設定を上書きするファイル名を指定します。
※.htaccessのままでよければそのままで結構です。
Deny from allでファイルへのアクセスを禁止します(11~14行目)。
※AccessFileNameでファイル名を変更した場合は、”.ht”を変更してください。
画像の直リンクを禁止する
以下の内容で設定するものとします。
- 許可するサイトも含める(自サイト・検索エンジン等)
- セキュリティソフト等のファイアウォールを介したアクセスは許可する
※リファラー(元のリンク先)が不明の場合の対策。 - 許可しないサイトに関しては代替画像を表示する
.htaccess
# 画像の直リンクを禁止
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?webcreator-net.com [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{REQUEST_FILENAME} \.png$ [NC,OR]
RewriteCond %{REQUEST_FILENAME} \.jpe?g$ [NC,OR]
RewriteCond %{REQUEST_FILENAME} \.gif$ [NC]
RewriteCond %{REQUEST_FILENAME} !/image/no_hotlink.jpg$
RewriteRule ^.*$ /image/no_hotlink.jpg [L]
3~9行目で許可するサイトを指定します。
3行目で自サイトは許可しています。
4行目でリファラー(元のリンク先)が不明の場合は許可しています。
これは、セキュリティソフト等を導入している場合、ファイアウォールを介したアクセスはリファラーが”空”となってしまうため、リファラーが不明なものに関しては画像の直リンク制限がかかり、サイト内の画像そのものが表示されなくなってしまう場合の対策です。
5~9行目でGoogle・MSN・Bing・Yahooといった主要検索エンジンは許可しています。
これは、Googleの画像検索等には表示させるようにするためです。
6行目で検索エンジンのキャッシュに対しても許可しています。
10~12行目で直リンクを禁止する画像の拡張子を指定します。
14行目で画像の直リンクを許可しないサイトに対して表示する代替画像のパスを指定します(※13行目はループ回避のための記述です)。
3行目と11行目に出てくるクエスチョンマークの意味は、”前の1語があってもなくても”という意味です。
例えば、”jpe?g”だと”jpeg”でも”jpg”でもOKということです。
複数語指定する時は、”()”でくくってやります。
代替画像のイメージ

関連記事(※当記事と関連性が高いと思われる記事)
.htaccessでよく使う設定
2011/12/22
サーバーの設定変更
2012/02/17
APCでPHPの処理を高速化
2012/06/12
gzip圧縮でWebコンテンツを高速化
2012/05/25
Web制作で活用したいツール
2012/09/30
おすすめ書籍・商品(※当記事と関連性が高いと思われる書籍・商品)