アクセス元のドメインでアクセスを制限したい場合は、.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 のみを許可することになります。
allow と deny の評価の順序は、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
|
指定したドメインを記述して下さい。
すべてと指定したい場合は「 【例】 IP アドレスで指定することも可能です。 例えば、200.210.220.0 〜 200.210.220.255 の範囲を指定したいなら、 【例】 |
ここで紹介した技は、すべてのレンタルサーバー環境で使えるものではありません。 ウェブサーバーとして採用されている apache の設定次第です。 apache がアクセス元ホスト名を解決(逆引き)しているか否かで決まります。 あなたがお使いの環境でこの技を使えるかどうかを確かめる方法が 2 つありますのでご紹介します。
ご利用のレンタルサーバーがアクセスログを公開している場合、 アクセス元のホスト名がどのようになっているかを確認してください。 もし、すべてが IP アドレスになっていれば、残念ながらこの技は使えません。
abcd.pop.hoge.com - - [18/Apr/2001:23:52:03 +0900] "GET・・・・
123.123.123.123 - - [18/Apr/2001:23:52:03 +0900] "GET・・・・
REMOTE_HOST からアクセスログを公開していない場合には、環境変数 REMOTE_HOST
から調べることができます。
以下のサンプル CGI をサーバにアップしてブラウザーで見てください。
もし何も表示されなければ NG です。
ホスト名が表示されれば OK です。
#!/usr/bin/perl
print "Content-Type: text/plain\n\n";
print $ENV{REMOTE_HOST};