直リンクを禁止するには
外部サイトからのリンクを禁止するには、「.htaccess」という特殊なファイルを使って、 Referer(リファラ)という情報を調べてアクセス制限を施します。
■.htaccessとは?
「.htaccess」ファイルとは、サーバの設定を記述したファイルのことです。このファイルに設定を書き込むことで、アクセス制限を施すことができます。他にも、アクセス認証を行ったり、SSIを使えるようにしたり、エラーメッセージをカスタマイズしたりもできます。
■Referer(リファラ)とは?
Refererとは、「参照元(リンク元)」のことです。ブラウザはこの情報を保持していて、ページや画像を読むたびにサーバに送信しています。この情報を調べれば、直前に閲覧していたページが自サイト内のページなのか、外部サイトのページなのかが分かります。
アクセス解析ツールでの「リンク元」解析にも、このReferer情報が使われています。
「.htaccess」ファイルを用意して、そこにReferer情報をチェックする設定を記述すれば、直リンクを防ぐ技術的なアクセス制限が作れることになります。
直リンクを禁止する手順
「.htaccess」ファイルを使って直リンクを禁止する手順は、次の通りです。
- 「.htaccess」ファイルを作成する
- この記事で紹介している記述をコピー&ペースト
- 参照元(リンク元)として許可するURLを列挙
- 直リンクを禁止したいファイルが入っているディレクトリに「.htaccess」ファイルを設置(アップロード)する
- 動作を確認する
以上です。上記の通り、手順は非常に簡単です。
この方法が使えない環境もある
この方法が使えない場合もあります。以下のような場合は使えません。
■「.htaccess」ファイルの使用が許可されていない場合
「.htaccess」の使用が許可されていない場合は、この方法は使えません。
無料のウェブスペースだと、許可されていないことが多いでしょう。レンタルサーバなら、たいていは使用可能です。詳しくは、レンタルサーバのマニュアルなどをご参照下さい。
(※無料のウェブスペースの場合、最初からサーバの仕様として、画像のみの外部からの参照を拒否するように設定されていることもあります。)
■ウェブサーバが「Apache」ではない場合
レンタルサーバなどで使われているウェブサーバはたいてい「Apache」なので、この点はあまり心配する必要はありません。 Microsoft社製の「IIS」や、フリーソフトの「AN HTTPD」などを使っている場合は、「.htaccess」ファイルは使えません。
直リンクを禁止する .htaccess ファイルを記述
例えば、 hogehoge.com サイト外からのすべてのリンクを拒否したい場合は、以下のように記述します。(5行)
SetEnvIf Referer "
hogehoge.com" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
上記の5行を「 .htaccess 」というファイル名で保存し、直リンクを拒否したいディレクトリ(フォルダ)にアップロードします。
■注意点:
- 「 .htaccess 」は、ファイル名の先頭に「 . 」(ドット記号)がありますので忘れないよう注意して下さい。
- WindowsやMacOSでは、ファイル名の先頭に「 . 」(ドット記号)を付けて保存できない場合があります。 その場合は、「 htaccess.txt 」のようなファイル名でとりあえず作成しておき、 FTPソフトでアップロードする際に、ファイル名を「 .htaccess 」に変更して下さい。
- 「 .htaccess 」ファイルに記述した設定は、ファイルを置いたディレクトリ自身と、その中に含まれるすべてのサブディレクトリに対して有効です。
- 既に「 .htaccess 」ファイルが存在するディレクトリに置きたい場合は、上記の5行を既存の「 .htaccess 」ファイルの中に追記します。
- 最後の行の末尾は、必ず改行して下さい。(改行しないと動かない場合があります。)
許可したいリンク元が複数ある場合は、以下のように必要なだけ列挙できます。
SetEnvIf Referer "
hogehoge.com" ShowOK
SetEnvIf Referer "
mydomain.com" ShowOK
SetEnvIf Referer "
mogumogu.com" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
※「hogehoge.com」とさえ書いておけば、URLに「hogehoge.com」を含むすべてのページからのリンクが許可されます。
画像ファイルだけを対象にして、直リンクを防ぐ記述
上記の方法では、ディレクトリ(フォルダ)内に存在するあらゆるファイルへの直リンクを拒否します。
ですから、HTMLと画像ファイルが同じディレクトリ内に存在する場合、上記の記述だと、画像ファイルだけでなくHTMLファイルへの直リンクも拒否してしまいます。すると、画像ファイルへの直リンクだけを拒否したい場合は、上記の記述では困ることになります。(※画像ファイルだけが独立した1つのディレクトリに格納されているなら問題はありません。)
その場合は、「.htaccess」ファイルに、対象ファイルを限定する記述を加えます。
例えば、GIF・PNG・JPEGの3種類のファイルのみを対象にする場合は、以下のように記述します。
<Files ~ "\.(gif|png|jpg)$">SetEnvIf Referer "
hogehoge.com" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
</Files> 他のファイル拡張子を対象にしたい場合は、上記の「 gif|png|jpg 」の箇所を修正します。もし、mov ファイルも加えたいなら「 gif|png|jpg|mov 」のようにします。