特定のドメインの人だけに見せる

自分が作ったページを特定の方たちだけに見せたいという場合が出てくるでしょう。個人を特定して見せるようにするためには、Basic認証が適切です。しかし、もう少しざっくりとドメイン指定で見せるようにすることもできます。そのためには、「.htaccess」に以下のように記述します。

order deny,allow
deny from all
allow from .hoge.com

この例では、アクセス元が「.hoge.com」のみをアクセスを許可し、その他の場合にはアクセスを拒否します。では、1行ずつ見ていきましょう。

order deny, allow」は、次の行に続く「allow」と「deny」の指示の評価の順序を定義します。例では、deny を先に評価し、次に「allow」を評価します。したがって、まず「deny from all」ですのですべてのアクセスを拒否すると定義し、次に、「allow from .hoge.com」を評価しますので、結局は、.hoge.com のみを許可することになります。

allowdeny の評価の順序は、order 指示子によって定義されますので、「allow」と「deny」の記述順はどちらでも結果が同じとなります。上の例と次の例では、結果が同じということです。

order deny,allow
allow from .hoge.com
deny from all

さて、次のようにorder指示子の「deny」と「allow」の順序を変えたらどうなるでしょう。

order allow,deny
allow from .hoge.com
deny from all

この場合には、最後に「deny from all」が評価されますので、すべてのアクセスを禁止することとなります。意味ないですね。

今まで説明してきた内容の応用で、特定のドメインからのアクセスだけ見せないとするにはどうすればいいでしょうか。「.hoge.com」の方だけ見せない場合の例は以下の通りです。

order allow,deny
allow from all
deny from .hoge.com

指示子のフォーマット(書き方)

order 「allow」と「deny」を評価する順に記載します。ただし、「allow」と「deny」はカンマで区切ってください。そしてスペースは入れないで下さい。
allow
deny
指定したドメインを記述して下さい。すべてと指定した場合意は「all」と指定します。また、2つ以上指定したい場合には、半角スペースでそれぞれを区切ります。
【例】 allow from .foo.com .bar.com

IPアドレスで指定することも可能です。例えば、200.210.220.0~200.210.220.255の範囲を指定したいなら、
【例】 allow from 200.210.220 

【制限事項】

ここで紹介した技は、すべての環境もしくはレンタルサーバで使えるものではありません。WWWサーバとして採用されている apache の設定次第なのです。apacheがアクセス元ホスト名を解決(逆引き)しているか否かで決まります。あなたがお使いの環境でこの技を使えるかどうかを確かめる方法が2つありますのでご紹介します。

アクセスログから

もし、プロバイダーがアクセスログを公開している場合は、アクセス元のホスト名がどのようになっているかを確認してください。もし、すべてがIPアドレスになっていれば、残念ながらこの技は使えません。

OKの場合 abcd.pop.hoge.com - - [18/Apr/2001:23:52:03 +0900] "GET・・・・
NGの場合 123.123.123.123 - - [18/Apr/2001:23:52:03 +0900] "GET・・・・
環境変数 REMOTE_HOST から

アクセスログを公開していない場合には、環境変数 REMOTE_HOST から調べることができます。以下のサンプルCGIをサーバにアップして、ブラウザーで見てください。もし何も表示されなければNGです。ホスト名(場合によってはIPアドレス)が表示されればOKです。

#!/usr/local/bin/perl

print "Content-Type: text/html\n\n";
print "$ENV{'REMOTE_HOST'}";