.htaccessでアクセス制御する

Apacheで特定のディレクトリだけに特別な設定を行いたいときがありますよね。そのようなときは、.htaccessファイルという特別なファイルを使います。ここでは、よくある設定を実例をあげて説明します。

特定のドメイン、IPアドレスを拒否する

Order allow,deny            # allowとdenyの順番に注意
allow from all              # 全てを許可しておいて
deny  from .hogehoge.com    # 拒否するドメイン,
deny  from 192.168.0.       # IPアドレスを記述する

この場合、hogehoge.comと192.168.0.からのアクセスは拒否されます。


特定のドメイン、IPアドレスのみを許可する

Order deny,allow            # denyとallowの順番に注意
deny from all               # すべての拒否しておいて
allow  from .hogehoge.com   # 許可するドメイン,
allow  from 192.168.0.      # IPアドレスを記述する

この場合、hogehoge.comと192.168.0.からのみ許可されます。


インデックスファイル名を変更する

DirectoryIndex index.html index.cgi index.php hogehoge.html

インデックスファイルとしたい名前をスペースで区切って並べます。左に記述されたファイルから優先されます。


ファイルの一覧をしないようにする -1-

DirectoryIndex index.html /errmsg.html 

index.htmlが無いときは、errmsg.html が表示されます。

ファイルの一覧をしないようにする -2-

Options -Indexes    #ファイルの一覧を不許可する

一部のレンタルサイトではインデックスファイルが無いときに、ファイルの一覧が表示されてしまうことがあります。この指定で、サーバーの標準指定から「ファイルの一覧を許可(Indexes)」を不許可(-)となります。他の設定は標準指定が引き継がれます。


別のURLに転送する

Redirect /hoge.html "http://www.hogehoge.jp/hoge.html"

hoge.htmlにアクセスがあるとhttp://www.hogehoge.jp/hoge.htmlに転送されます。

Redirect  /hogehoge/ http://www.hogehoge.jp/

hogehogeディレクトリ以下のファイルにアクセスがあったときは、 http://www.hogehoge.jp/以下の同名のファイルに転送されます。
特定のディレクトリ以下を一気に変更する便利な方法。 転送先のURLはhttp;//から始める必要があります。


標準のエラーコードを変更する

ErrorDocument 403 /err/forbidden.html

403エラー(アクセス権無し)が起こったときは、/err/forbidden.htmlが表示されます。
ファイル名はDocmentoRootからの絶対パスで記述します。
~で始まるURLは「/~ユーザ名」を忘れずに付けて下さい。

ErrorDocument 404 /err/notfound.html

404エラー(ファイルが見つかりません)が起こったときは、/err/notfound.htmlが表示されます。
DocmentoRootからの記述でうまく行かないときは、「http://www.hogehoge.jp/err/notfound.html」のように、http://から記述するとうまく動作するようになります。

ErrorDocument 500 http://hogehoge.com/cgi-bin/

500エラー(サーバエラー)が起こったときは、 http://hogehoge.com/cgi-bin/にリダイレクトされます。


アクセス制限

AuthUserFile /home/hogehoge/.htpasswd        # パスワードファイル名
AuthGroupFile /dev/null                      # グループファイル名
AuthName "Please enter your ID and password" # ダイアログに表示するメッセージ
AuthType Basic                               # 基本認証を指定する
require valid-user                           # 認証に成功したユーザがアクセスできる

基本認証を行います。あらかじめhtpasswdコマンドで.htpasswdファイルにユーザを作成しておく必要があります。


特定の拡張子をもつファイルにアクセスできないようにする

<Files ~ "\.(dat|log|csv)$"> #
  deny from all              #全てのユーザからのアクセスを拒否 
</Files>

dat,log,csvを拡張子に持つファイルにブラウザからアクセスできないようになります。cgiからはアクセスできるのでご安心を。


.htpasswdの作成方法

$ htpasswd -c .htpasswd user

TELNET等でログインできる場合は、htpasswdコマンドを実行することで作成することが出来ます。新規にファイルを作成するときのみ-cオプションを付けます。ユーザを追加するときには-cオプションは付けません。