直リンクやディープリンクを技術的に阻止するには

外部サイトからのリンクを禁止するには、「.htaccess」という特殊なテキストファイルを使って、Referer(リファラ)という情報を調べることでアクセス制限を施します。直リンクを阻止したい場合でも、ディープリンクを拒否したい場合でも、あらゆるリンクを禁止したい場合でも、設定に使うファイルや記述方法は同じです。

.htaccessとは?
.htaccessファイルとは、ウェブサーバの設定を記述したテキストファイルのことです。このファイルに設定を書き込むことで、アクセス制限を施せます。詳しくは、記事「.htaccessファイルの書き方と設置方法」をご参照下さい。.htaccessファイルの作成方法や、エラーが出た場合の対処方法などについてを解説しています。本記事ではこの記事と重複する内容は省いています。

Referer(リファラ)とは?
Refererとは「参照元(リンク元)」のことです。ブラウザは、ウェブサーバに対してページや画像などの情報をリクエストするたびに、このReferer情報をウェブサーバに送信しています。この情報を調べれば、直前に閲覧されていたページが自サイト内にあるのか外部サイトにあるのかが判断できます。

.htaccessファイルを作成して、そこにReferer情報をチェックする設定を記述すれば、直リンクやディープリンクなどを防ぐ技術的なアクセス制限が作れます。

直リンクやディープリンクなどを禁止する設定手順

.htaccessファイルを使って直リンクやディープリンクを禁止する手順は、次の通りです。

Step.1: .htaccessファイルを作成する
本記事で紹介している記述をテキストエディタにコピー&ペーストしてから、参照元(リンク元)として許可するURLを必要なだけ列挙して、「.htaccess」というファイル名で保存します。

Step.2: .htaccessファイルを設置(アップロード)する
直リンクやディープリンクなどを禁止したいファイルが存在するディレクトリに.htaccessファイルを設置します。設置場所の判断方法は、記事「.htaccessファイルの書き方と設置方法」の3ページ目『「.htaccess」ファイルの設置(アップロード)方法』をご参照下さい。

Step.3: 動作を確認する
.htaccessファイルに記述ミスがあると、設定が影響する範囲内にあるどのページにアクセスしても「Internal Server Error」が出ます。その際は、先の記事の4ページ目『エラー「Internal Server Error」が出てしまう場合』を参考にしてミスを修正して下さい。

以上の3ステップで完了です。それでは、.htaccessファイルを記述してみましょう。

直リンクやディープリンクを禁止する.htaccessファイルの書き方

例えば、 http://allabout.co.jp/ サイト外からのすべてのリンクを拒否したい場合は、.htaccessファイル内に以下の5行を記述します。
SetEnvIf Referer "^http://allabout\.co\.jp" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
最後の行の末尾では忘れずに必ず改行して下さい。

上記の5行を「.htaccess」というファイル名で保存し、直リンクやディープリンクを拒否したいディレクトリにアップロードします。なお、許可したいリンク元が複数ある場合は、以下のように必要なだけ列挙できます。
SetEnvIf Referer "^http://allabout\.co\.jp" ShowOK
SetEnvIf Referer "^http://about\.com" ShowOK
SetEnvIf Referer "^http://www\.example\.com/~sakura/" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
上記の場合は、以下の3サイトからのリンクは許可します。それ以外のサイトからのリンクは拒否します。
  • http://allabout.co.jp/
  • http://about.com/
  • http://www.example.com/~sakura/

※「http://allabout\.co\.jp」とさえ書いておけば、URLの先頭に「http://allabout.co.jp」を含むすべてのページからのリンクが許可されます。

画像ファイルだけを対象にして、直リンクを防ぐ記述

先の方法では、対象ディレクトリ内に存在するあらゆるファイルへの直リンクやディープリンクを拒否します。したがって、HTMLファイルと画像ファイルが同じディレクトリ内に存在する場合は、画像ファイルだけでなくHTMLファイルへのリンクも拒否してしまいます。

「HTMLへのリンクは構わないが画像ファイルへの直リンクだけを拒否したい」という場合は、下記のように「対象ファイルを限定する記述」を加えます。例えば、GIF・PNG・JPEGの3種類のファイルのみを対象にしたい場合は、以下のように記述します。
<Files ~ "\.(gif|png|jpg)$">
SetEnvIf Referer "^http://allabout\.co\.jp" ShowOK
SetEnvIf Referer "^$" ShowOK
order deny,allow
deny from all
allow from env=ShowOK
</Files>
上記の場合は、ファイル名が「.gif」・「.png」・「.jpg」のどれかで終わっているファイルのみを対象にしてアクセス制限を施しています。他のファイル拡張子も対象にしたい場合は、上記の「gif|png|jpg」の箇所を修正して下さい。例えばmovファイルも加えたいなら「gif|png|jpg|mov」のように記述します。

上記のソースをコピー&ペーストして、URL部分だけを書き換えれば使えます。とはいえ、各行の意味を把握しておく方がカスタマイズしやすいでしょう。

そこで最後に、上記の直リンクを禁止する.htaccessソースの内容を1行ずつ簡単に解説しておきます。