無断リンクを禁止する!

htaccess使えない人は、こういうことやればいいのかな?

var Tinycafe = {};
Tinycafe.toppage = 'http://localhost/~kazuaki/tinycafe/';
Tinycafe.deny = [
  'http://localhost/~kazuaki/tinycafe/denied.html'
];
Tinycafe.allow = [];

Tinycafe.check = function (ref,pattern) {
  for(var i = 0, len = pattern.length; i < len; i++)
    if(ref.match('^' + pattern[i])) return true;
  return false;
};
Tinycafe.verify = function () {
  var ref = document.referrer;
  if ((!ref || !ref.length) ||
      (Tinycafe.deny.length > 0 && Tinycafe.check(ref,Tinycafe.deny)) ||
      (Tinycafe.allow.length > 0 && !Tinycafe.check(ref,Tinycafe.allow)) 
  ) location.href = Tinycafe.toppage;
};

この内容をとりあえず、tinycafe.jsとかそんな感じの名前で保存しよう。
んで、Tinycafe.toppageのURLを自分のトップページに書き換えると。
ブラックリストは、Tinycafe.denyの配列の内容。ここに追記していけば、それらのURLからアクセスしてきた場合、toppageにリダイレクトするよ。
Tinycafe.allowはホワイトリスト。このページには、ここからしかアクセスさせたくないってのを書く。でもきっと、コレはページごとに設定したいと思うからとりあえず、空でもOKだけど、全てのページで同じように許可したいところがあれば、ここに書いてね。
これらのリストは、一件一件指定しなくても、例えばはてぶだったら、http//b.hatena.ne.jp/をブラックリストにいれればまとめて弾くはず。同様に、Googleの検索からは個別ページにアクセスできるようにしたいっていうんだったら、http://google.co.jp/とかをホワイトリストにいれておけばいいかな。
逆に一件一件指定したいんだ!っていうなら、http://d.hatena.ne.jp/send/$みたいな感じで、最後に$をつければ、OK、http://d.hatena.ne.jp/send/からはアクセスできないけど、http://d.hatena.ne.jp/send/20060105とかからアクセスできるよ。
なんで、こんな書き方かって言うと正規表現で、パターンを指定して禁止してるから。正規表現って何?って思うかもしれないけど、無断リンク推奨派が殆どを占めると言われてるプログラマってきもい人たちの大好物みたいなもんだから、気にしなくて大丈夫だよ!


さて、じゃあ、いよいよ準備したtinycafe.jsを個別のページに設定して、わるいやつらをこらしめてやります。
こんな感じになるよ。

<html lang="ja">
<head>
<title>Tinycafe's Homepage</title>
<script type="text/javascript" src="./tinycafe.js"></script>
<script type="text/javascript">
  Tinycafe.allow = Tinycafe.allow.concat([
    'http://localhost/~kazuaki/tinycafe/',
    'http://localhost/~kazuaki/tinycafe/index.html$'
  ]);
  Tinycafe.verify();
</script>
</head>
<body>
<h1>Welcome to My Homepage</h1>
<div>
<p>Sorry, This Page is Japanese Only.</p>
</div>
</body>
</html>

tinycafe.jsを正しいURLに書き換えて、許可するURLを7行目辺りの感じで書いていけば、コレで完了!



ちなみにJavaScriptをoffにすれば、アクセス出来ちゃうんじゃないの?って思うかもしれない。そうその通り。それもやだって言うんだったら、このコードを4行目辺りに突っ込もう。

<noscript>
  <meta http-equiv="Refresh" content="0; url=http://localhost/~kazuaki/tinycafe/">
</noscript>

URLは、自分のトップページとかに変えてね。


さて、コレで、今日からJavaScript使えるところだったらお手軽無断リンク禁止が可能になったね。
でも、コレは完全じゃなくてJavaScript offでリダイレクト不許可でアクセスしてきたり、Referrer偽装に対しては何も出来ない。それにReferrerを正しく送らないブラウザだとか、視覚障害者用のブラウザなんかで、ページにアクセス出来ない可能性がある。
あと、コレはページが表示されるときに、相手を飛ばすから、アクセス解析には痕跡が残るかもしれない。


こういったことを承知で、それでも無断リンク禁止したいなら、コレをどうぞ。
コレじゃ、満足出来んっていうなら、もっとちゃんとしたシステムを誰かに作ってもらうか、出来るまで待つか、自分で作るしかないと思うよー。