.htaccessによるリンク制限

インターネットはネットはリンクフリーが当たり前

インターネットはリンクフリー、全てオープンが当たり前の世界です。

「お気に入りはインデックスに」「オンラインブックマークはご遠慮ください」と書くのは、 (やらない方が良いと思いますが)個人のわがままとして自由です。でもそれに従うかどうかはやっぱり閲覧者それぞれの自由なんです。

同人サイト管理人の多くがこの考えが嫌いな事は分かりますし、実際、同人系コミュニティでは、こういった管理人のお願いは聞いてもらえる事が多いです。
しかし現在「ネットは全て公開前提。全てのページにリンクフリー。」という考え方が大多数の「常識」であり、このような常識で動いているネットに、好きで出てきて勝手にサイトを開設したのは自分自身だと言う事を心に留めていてください。

とりあえず、リンクを禁止するのは強制力の無い個人のわがままでしかありません。
個人的には、わがままと自覚して「お願い」するのは別に構わないと思います。しかしそれを適当な大義名分でくるんで「マナー」「常識」と(攻撃的な口調で)語るような事は止めておいた方が賢明です。
自分のわがままに従わないからといって、閲覧者を悪者扱いするのも無用なトラブルの元です。

リンクされるのが嫌な場合は、完璧で無いとはいえ技術的に制限が可能です。

注意

リンク元を制限する方法は完璧ではありません。
たとえばURLをコピーペーストして来る人はブロックできません。 またノートン・インターネットセキュリティのようなリファラ送信をブロックするソフトを入れている人には効きません。
それでも迷い込む人を減らしたり、画像の直リンクを防いだりするには十分だと思います。

.htaccessで特定URLからのリンクを制限

.htaccessでの検索よけにもちらりと書いていますが、 外部からのリンクを制限する.htaccessのパターンは以下の通りです。 これに大手検索エンジンのURLを入れておけば、多少検索にヒットしても大体はブロックできます。

SetEnvIf Referer "http://abc.com" shutout
SetEnvIf Referer "http://example.ne.jp" shutout

order Allow,Deny
Allow from all
Deny from env=shutout(ここに改行を必ず)

口語訳

リンク元がhttp://abc.comを含んでいるならshutout
リンク元がhttp://example.ne.jpを含んでいるならshutout

許可禁止の順番で処理
全てを許可
shutout拒否

※ブラウザにキャッシュが残っていると上手くいかない場合があります。リロードするなどして試してください。

.htaccessで特定URLからのリンクのみを許可

特定のURLからのリンクのみを許可するパターン。画像の直リンク禁止によく使われるパターンです。

SetEnvIf Referer "^http://example\.ne\.jp" welcome
SetEnvIf Referer "^$" welcome

order Deny,Allow
Deny from all
Allow from env=welcome(ここに改行を必ず)

口語訳

リンク元がhttp://example.ne.jpを含んでいるならwelcome
リンク元が空白(=ブラウザのお気に入り)ならwelcome

禁止許可の順番に処理
全てを禁止
welcome許可

リンクを許可するURLには自分のサイトのURLを入れるのが一般的です。

※ブラウザにキャッシュが残っていると上手くいかない場合があります。リロードするなどして試してください

たとえば、index.html(あるいは外部からリンクして欲しいページ)以外を、 まとめてフォルダに入れ、そのフォルダに上記のような.htaccessを入れれば、index.html以外のページに、 外部からリンクを貼られても、アクセスされる事は少なくなります。
あるいは、画像専用フォルダを作成し、そこにこの.htaccessを入れれば、画像の直リンク対策に効果があるでしょう。 (<Files>の説明は省略)
その際は外部呼び出しを許可したいバナーなどを巻き込まないように注意して下さい。

許可するURLに含まれる「^」「$」「\」は正規表現と呼ばれるものです。 セキュリティ面を考えて入れておいて下さい。正規表現は簡単にで良いので理解しておくと便利です。

SetEnvIf Referer "^$" welcome(リンク元が空白ならwelcome)」の行を削除すれば、ブラウザのお気に入りからのアクセスも禁止する事が可能ですが、 同時にノートンインターネットセキュリティなどのソフトを入れている人もブロックしてしまいますので、決しておすすめはしません。

ロボットを拒否しつつディープリンク禁止

ロボットを拒否しつつ、ディープリンク禁止したい場合の.htaccessはこのパターンで行けるはずです。

SetEnvIf Referer "^http://example\.ne\.jp" welcome
SetEnvIf Referer "^$" welcome

SetEnvIf User-Agent "Googlebot" shutout
SetEnvIf User-Agent "Slurp" shutout

order Allow,Deny
Allow from env=welcome
Deny from env=shutout(ここに改行を必ず)

口語訳

もしリンク元がhttp://example.ne.jpを含んでいたらwelcome
もしリンク元が空白(=ブラウザのお気に入り)ならwelcome

もしUAがGooglebotを含んでいたらshutout
もしUAがSlurpを含んでいたらshutout

許可禁止の順で処理
welcomeを許可
shutoutを禁止

※ブラウザにキャッシュが残っていると上手くいかない場合があります。リロードするなどして試してください。
※ロボットの変わりにIEとSafariを拒否しているのでFireFoxなどを使ってテストしてください。

上位フォルダに別にロボット弾き用.htaccessを設置してある場合

【フォルダ構造】
├index.html(外部リンク許可ファイル)
ロボット拒否用.htaccess
├/site(ディープリンク禁止フォルダ)
     ├(外部リンクされたくないファイル)
     ├ディープリンク禁止用.htaccess

このようなフォルダ構造で、上位フォルダに設置した 「ロボット拒否用.htaccess」で下記のように「拒否ロボット=shutout」の指定をしてある場合

SetEnvIf User-Agent "Googlebot" shutout

下位フォルダの.htaccessはその設定を引き継ぎますから、ロボットを再び指定しなおさなくても大丈夫です。つまりこう書けばOK。

SetEnvIf Referer "^http://example\.ne\.jp" welcome
SetEnvIf Referer "^$" welcome

order Allow,Deny
Allow from env=welcome
Deny from env=shutout(ここに改行を必ず)

inserted by FC2 system