Other

画像の直リンクを禁止する

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ということです。
複数語指定する時は、”()”でくくってやります。

代替画像のイメージ

代替画像のイメージ

List

関連記事(※当記事と関連性が高いと思われる記事)

.htaccessでよく使う設定

2011/12/22
.htaccess
スコア:7 ※スコアの数値が大きいほど、関連性の高い記事です。 URLをwww有りかwww無しに統一する WWW有りか無しどちらが良いかは一概に言えませんが、SEOやアクセス解析の観点からいうと、どちらかに統一することは大事です。私... 続きを読む...

サーバーの設定変更

2012/02/17
サーバーの設定変更
スコア:5 ※スコアの数値が大きいほど、関連性の高い記事です。 php.iniの設定変更 viコマンドでphp.iniを編集 vi /etc/php.ini・・・viでphp.iniを開く ;メモリの上限を変更 memory_lim... 続きを読む...

APCでPHPの処理を高速化

2012/06/12
APCでPHPの処理を高速化
スコア:5 ※スコアの数値が大きいほど、関連性の高い記事です。 PHPアクセレーターAPCとは? PHPアクセレーターとは、PHPのスクリプトを最適化してコンパイルされた状態でデータをキャッシュし、以後同じデータにアクセスがあった際... 続きを読む...

Web制作で活用したいツール

2012/09/30
Web制作で活用したいツール
スコア:2 ※スコアの数値が大きいほど、関連性の高い記事です。 パフォーマンス測定 GTmetrix オンラインツール サイトの表示速度を計測 パフォーマンスの改善点を調査 ブラウザとサーバー間のやり取りを調査※時間・データサイズ・... 続きを読む...

おすすめ書籍・商品(※当記事と関連性が高いと思われる書籍・商品)

ページの先頭へ