直リンクを禁止する.htaccessソースの解説
前のページでご紹介した直リンクやディープリンクなどを禁止するための.htaccessファイルの中身は、下記の5行でした。SetEnvIf Referer "^http://allabout\.co\.jp" ShowOK SetEnvIf Referer "^$" ShowOK order deny,allow deny from all allow from env=ShowOKこの中身の意味を、1行ずつ以下に解説いたします。
■1行目:許可するURLの記述
SetEnvIf Referer "^http://allabout\.co\.jp" ShowOKSetEnvIfは「条件が成立した場合に環境変数を設定する」という意味です。ここでは、
- Referer(参照元)に
- 「http://allabout.co.jp」という文字列が含まれていた場合に
- 環境変数「ShowOK」を設定する
リンクされた場合の動作は以下のようになります。
- もし、自サイト(ここではallabout.co.jp)内からのリンクなら、Refererには「http://allabout.co.jp」という文字列が含まれているはずなので、この条件が成立します。その結果、環境変数「ShowOK」が設定されます。
- しかし、外部サイトからのリンクなら、Refererには外部サイトのURLが含まれますから条件は成立しません。その結果、何の環境変数も設定されません。
なお、URLを記述する際には以下の3点に注意して下さい。
- URLを記述する際には、ドット記号「.」は「\.」のように半角の円記号(=バックスラッシュ)を前に加える必要があります。
- URLは「http://」から書き、先頭には半角のハット記号「^」を加えます。
- ドメイン名の先頭に「www」がある場合、「www」を省略しても同じサイトにアクセスできる場合があります(例えば、http://www.example.com/ でも http://example.com/ でもアクセスできるなど)。その場合は、両方のURLを記述しておきましょう。
※先の2点は、正規表現という記述方法を使っているための仕様です。これらを省略しても動作はしますが、省略するとリンク元ページに少し工夫をするだけでアクセス制限を無効にできてしまいます。
■2行目:Referer情報がない場合も許可する記述
SetEnvIf Referer "^$" ShowOKこの記述は、「Referer情報が得られなかった場合」に環境変数を設定する記述です。この記述は、次の2点への対処のために必要です。
- セキュリティソフト利用者への対処
ブラウザがウェブサーバに対してReferer情報を提供するのを阻止するセキュリティソフトがあります。そのようなユーザに対しては、アクセスを許可して良いはずの場面でアクセスを拒否してしまうことになります。それを防ぐために、Referer情報が得られなかった場合には無条件で許可するようにします。 - URLを直接アドレス欄に打ち込んでアクセスした場合への対処
ここではリンクを防ぎたいだけなので、URLを直接入力してアクセスされた場合には許可する必要があります(※URLを直接入力した場合は、「直前にアクセスしたページはない」ので、Referer情報はありません)。
※上記のように「^$」と書くと「なし」という意味になるのは、正規表現で「^」は先頭を、「$」は末尾を表すためです。先頭と末尾の間に何も存在しないので、「何もない」という意味になります。
■3行目:許可と拒否の評価順の指定
order deny,allowこの記述は、アクセス拒否(deny)とアクセス許可(allow)のどちらを先に評価(解釈)するかを指定する記述です。ここでは必ず上記のように記述します。ここでは「deny,allow」と記述しているので、「許可(allow)」よりも「拒否(deny)」の記述が先に評価されます。
■4行目:すべてを拒否する記述
deny from allこれは、「すべてのアクセスを拒否する」という意味の記述です。
■5行目:先ほどの条件に合致した場合のみ許可する記述
allow from env=ShowOKこれは、「env(環境変数)に『ShowOK』が設定されている場合だけ許可する」という意味の記述です。
3行目で、「許可(allow)」よりも「拒否(deny)」の記述が先に評価されるよう記述しているので、4行目と5行目の記述は合わせて以下の意味になります。
- 「すべてのアクセスを拒否する」
- 「ただし、env(環境変数)に『ShowOK』が設定されていれば許可する」
なお、「env(環境変数)に『ShowOK』が設定されている」とは、1行目と2行目に記述した条件のどちらかに合致する場合のことです。
アクセス拒否の場合に独自のメッセージを表示するには
本記事でご紹介した方法を使ってアクセスが拒否された場合には、閲覧者のブラウザには「403 Forbidden」というエラーメッセージが表示されます。この「403 Forbidden」エラーメッセージは、.htaccessファイルに記述を加えることで自由に書き換えられます。詳しくは、記事「Not Found などのエラーメッセージを自由に書き換えたい」で解説していますので別途ご参照下さい。
直リンクやディープリンクを防ぐ技術的な方法
今回は、外部サイトからのリンク(直リンクやディープリンク)を技術的に拒否する方法をご紹介いたしました。「リンク禁止!」などと宣言をしても意味はありません。本当に禁止したいなら、本記事でご紹介したような技術的な方法を使う必要があります。本当に必要な場合には試してみて下さい。【関連記事】
- 基本認証でアクセス制限をかける方法
- Not Found などのエラーメッセージを自由に書き換えたい
- .htaccessファイルの作成方法と設置方法
- ログインページに他人がアクセスするのを拒否する方法
- 簡単閲覧制限!JavaScriptでパスワード認証