Tips記事
» 2002年03月27日 00時00分 UPDATE

mod_rewriteで直リンクを禁止する

[木田佳克,ITmedia]

 httpサーバ「Acpache」の設定では,特定のページからアクセスしなければ下の階層をたどれないように設定することができる。ここではApacheのモジュールの1つ「mod_rewrite」を利用した方法を解説する。

 mod_rewriteは,訪問者が情報を持っているrefererを判別することができ,どこのページからたどってきたかを調査して直リンクを禁止するのだ。

 以下の設定をしたい場合には,まず最初にmod_rewriteが組み込まれているかを確認しよう。次に挙げるボールドの2行があれば使用可能だ。

# cat /etc/httpd/conf/httpd.conf (RPMパッケージの場合のパス)
#
# Dynamic Shared Object (DSO) Support
#
................

LoadModule rewrite_module modules/mod_rewrite.so

................
AddModule mod_rewrite.c

 このmod_rewriteモジュールを使って設定するには,次のように記述すればよい。特に指定記述するための箇所というものはないが,上記のmod_rewriteが記述されている個所以降に加える点だけは必須だ。

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^ http://www\.zdnet\.com/help/index\.html.*$ [NC]
RewriteRule ^(.*)$ - [F]

 上記による指定では,http://www.zdnet.com/help/index.htmlからたどったアクセスのみを許可するようになる。ここでの[NC]は,大文字小文字を区別しない(No Case),[F]はアクセス禁止(Forbidden)を意味するものだ。また,[OR]という指定もあり,後述するように「または」という論理指定をすることが可能だ。

 また,リファラー(HTTP_REFERER)で判別するのではなく,リモートホストやリモートアドレスで制限することもできる。次のように指定しておくと,「*.example.co.jp」とIPアドレス「123.456.789.」「012.345.678.」からのアクセスを拒否することが可能だ。

RewriteEngine on

RewriteCond %{REMOTE_HOST} \.example\.co\.jp$ [NC,OR]
RewriteCond %{REMOTE_ADDR} ^123\.456\.789\. [OR]
RewriteCond %{REMOTE_ADDR} ^012\.345\.678\. [OR]
RewriteCond DUMMY CONDITION
RewriteRule ^.*$ - [F]

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ