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

アクセス元のドメインでアクセスを制限したい場合は、.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

制限事項

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

1. アクセスログから

ご利用のレンタルサーバーがアクセスログを公開している場合、 アクセス元のホスト名がどのようになっているかを確認してください。 もし、すべてが 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・・・・

2. 環境変数 REMOTE_HOST から

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

#!/usr/bin/perl
print "Content-Type: text/plain\n\n";
print $ENV{REMOTE_HOST};