.htaccessファイルの設定

.htaccessファイルの設定では幾らかの操作を行えますが、 .htaccessファイルの設定の特徴はそれが下層のディレクトリ全てに及ぶと言うことです。 つまりCGIなどで入り口にだけパスワードを掛けたけど中身で直にアクセスされてしまうと言った問題を解決出来るのです (この場合普通はURLでアクセス出来ない場所に中身のファイルを置きますが)。

何が出来る?

.htaccessファイルを利用して出来ることから以下の3つをピックアップして説明して行きたいと思います。

.htaccessファイルの作成

メモ帳やワードパッドなどのテキストエディタで空のファイルを作り、htaccess.txt と言う名前で保存して下さい。 このファイル名は後でFTPソフトでアップロードをした後に .htaccess へ変更します。 一反サーバでファイル名変換したものをダウンロードして編集する場合にはそのままで平気です。

エラーファイルの独自設定

エラーファイルはたくさんありますが実際に良く目にするものとしては、403-Forbidden、404-Filenotfound、500-Severerrorの3つがあります (401も有名ですね)。この3つのエラーが発生した時にそれぞれのエラーファイルへと飛ばすように設定しましょう。

ErrorDocument 403 http://www.din.or.jp/~c-i-mnet/error/403.html
ErrorDocument 404 http://www.din.or.jp/~c-i-mnet/error/404.html
ErrorDocument 500 http://www.din.or.jp/~c-i-mnet/error/500.html

見ての通りかと思いますが、ErrorDocumentの後にスペースを空けてエラーの番号を記入して下さい。 その後にスペースを空けてエラーファイルのあるURLを書いて下さい。 普通のエラーファイルではURLバーの表示はそのままだと思いますが、.htaccessで設定した場合にはそのエラーファイルのある場所が表示されます。

アクセス制限(パスワード)

ディレクトリをパスワードによってプロテクトを掛けたい場合は.htaccessファイルとは別に、.htpasswdファイルと言うIDとパスワードのリストを保存するファイルが必要になります。 .htpasswdファイルを作成するためにはtelenetでサーバにログインします(サーバによってはファイルの作成が出来ません。その場合はこちらで作成して下さい)。 ログインしたらプロテクトしたいディレクトリへ移動します。そこに.htpasswdファイルを作成するわけですが、新たにパスワード用のディレクトリを作ってそこに保存しても構いません。 以下のコマンドを打つことにより.htpasswdファイルの作成が出来ます。

htpasswd -c .htpasswd Bokupi

するとBokupiのパスワード設定が始まります。

Adding password for Bokupi.
New password:           ←ここでパスワードを打つ
Re-type new password:       ←確認のためもう一度打つ

これでBokupiのIDとパスワードの設定完了です。これ以降の追加は、

htpasswd .htpasswd Yun

と言う風にして追加したいID(Yun)を入力していって下さい(最初の時と違いますので注意しましょう)。 必要なIDの追加が終わったら最後にpwdコマンドでディレクトリのフルパスを確認して下さい。 次の.htaccessファイルの設定で使用します。

続いて.htaccessファイルの設定です。

AuthUserFile /home/etc/c-i-mnet/member/.htpasswd     ←(1)
AuthGroupFile /home/etc/c-i-mnet/member/.htgroup     ←(2)
AuthName "Restricted Access Area"     ←(3)
AuthType Basic     ←(4)
require group customer     ←(5)

(1)先程調べたパスワードファイルへのフルパスです(フルパスはURLとは違います)。
(2)グループファイルへのフルパスです(グループ化しないなら必要ありません)。
(3)このプロテクトの名前です。ID問い合わせのボックスに表示されますが何でもいいでしょう。但し文中にspaceが入る場合は必ずダブルクォートで囲んで下さい。
(4)特に考えずにBasicとして下さい(笑)。
(5)ここでアクセス可能なIDを指定します。幾らか書き方がありますので以下で説明します。

require user user-name user-name..     ←(1)
require group group-name group-name..     ←(2)
require valid-user     ←(3)

(1)ID単位でアクセスの許可をします。上記のuser-nameの部分にIDが入ります。spaceを空けて何人も続けて書けます。
(2)グループ単位でのアクセスの許可をします。グループに関しましては別途設定する必要があります。(後述参照)
(3)IDを保有する全ての者にアクセスを許可します。

次にグループファイルの設定ですが、ファイル名は何でもいいので(上記の例ならば .htgroup )テキストエディタで以下のようなファイルを作成して下さい。

group-name: user-name user-name..     
group-name: user-name..     

アクセス制限(ドメイン)

訪問者のドメインによってアクセスを制限する方式です。 制限の方法には「特定のドメインからのアクセスを拒否する」、「特定のドメインからのアクセスを認める」、或いはそれらの複合と言ったものがあります。 下に特定のドメインからのアクセスを拒否する例を記しましょう。

order allow, deny     ←(1)
allow from all     ←(2)
deny from ppp16-185.din.or.jp     ←(3)
deny from 133.0.20     ←(3)

(1)allowを先に解釈しその後にdenyを解釈します。この例では(2)で全てのドメインからのアクセスを認めた後、denyで拒否するドメインを決定します (もし順序が逆だったらdenyで拒否したドメインが(2)で全て許可されてしまいます)。
(2)allow from IP / ホスト / all 。IPは左側から、ホスト名は右側から判定されます。要はより大元から判定されるわけです。 記述されたドメインからのアクセスを認めます。allは全てのドメインからのアクセスを認めます。
(3)denyはallowの逆で記述されたドメインからのアクセスを拒否します。

その他の方法によるアクセス制限

これまでに記述してきた以外の方法でもアクセスを制限することが可能です。 1つ目の方法はHTTPメソッドによる制限方法です。

<Limit GET POST>     ←(1)
allow from all     ←(2)
</Limit>     ←(1)

(1)<Limit method-name>〜</Limit>で囲まれた箇所にmethod-nameメソッドによるアクセスの制限を掛けます。
(2)<Limit>ブロックの中身です。この例の場合は全てのドメインからのアクセスに対してGET,POSTメソッドの受信を拒否します。

次の方法はファイル名によってアクセスの制限を行う方法です。

<Files filename filename>     ←(1)
require valid-user     ←(2)
</Files>     ←(1)

(1)<Files filename filename>で指定されたファイルに対してのみ、<Files>ブロックで囲まれた箇所のアクセス制限を行います。
(2)<Files>ブロックの中身です。上記の例では指定されたファイルのみにユーザ認証を掛けます。

これは少し注意しなくては行けない部分があって、特定のファイルにだけ認証によるアクセスを許可して、その他のファイルへのアクセスを拒否したい場合はその設定も行わないといけません。 つまり<Files>ブロックの外でrequire valid-userを書いてなくてもアクセスが許可されてしまいます(これはサーバのデフォールトにもよるんでしょうか?まだ未確認です)。

ドメインによって認証をかける

先の複合機能ですね。

AuthUserFile /home/etc/c-i-mnet/member/.htpasswd
AuthGroupFile /home/etc/c-i-mnet/member/.htgroup
AuthName "Restricted Access Area"
AuthType Basic

require user valid-user     ←(1)

Satisfy any     ←(2)

order allow, deny
allow from all     ←(3)
deny ppp16-088.din.or.jp     ←(3)

(1)でIDを持っているユーザに対して認証を行います。(3)では特定のホストをはじきます。 (2)では、認証制限、ホスト制限の一方を通過すればアクセスを許可するようにしています。

Satisfy any  認証制限、ホスト制限のいずれかを通過すればアクセスを許可する。
Satisfy all  認証制限、ホスト制限の両方を通過すればアクセスを許可する。

その他使えそうな(?)機能

ディレクトリのデフォルトURLを変更する

需要がありそうでなさそうな機能だったり。CGIファイルを扱うディレクトリでindex.cgiとしたりするぐらいでしょうか? まあ後はちょっとした自慢テクとして使うとか(笑)。とりあえずまともな使用法は思い浮かびません・・(隠しページへの仕掛けとしても使えるかな?)。

DirectoryIndex URL URL

左側のURLから順に捜して行きます。

別urlへ移動させる

引越しの際に便利です。訪問者がどのファイルへアクセスしても指定した移動先へ飛ばしてくれるので手間が省けます。

Redirect old_url move_url

old_urlは絶対パスで記入して下さい。絶対パスの調べ方は上述にあります。 old_urlへのアクセスがあった場合、move_urlへと転送します。

拡張子関連

これはうちの環境ではまだ上手く行きません。上手く行けば*.jpgなcgiファイルが出来ると思うのですが・・。 (うちではcgiファイルをjpg拡張子にするとcgiと解釈はするのですが、サーバエラーとなってしまいます)

訪問者に個人ページを配分する<アイデア>

こんなことが出来るかもしれない、と言うアイデアを提供します。筆者は試しておらず、諸所に問題もあるでしょうがあくまでアイデア提供ですので実装は各個の技量で。

具体的には訪問者に専用のページスペースを与えようと言うものです。 プチホームページみたいな感じで、サイト内で作品の発表会みたいなものが催される場合などに便利です。 これを作成するのに必要となるものは.htaccessファイル、cgiファイルとファイルアップローダです。 アップローダはどこかから捜して下さい(麦)。設計イメージは以下の通りです。

まずユーザ登録は管理人が手動で行います(パスワードファイルってcgiから作成出来るのでしょうか?)。 そしてアップローダcgiから実際にユーザがファイルをアップロードします。そこでファイルの所有者を記録し、.htaccessファイルを書き換えます。 名前の衝突を避けるため各ユーザ毎のフォルダを設けましょう。とりあえずこれで完成です。 実際に確実な需要が無い限りは作る必要が無いでしょう。さびれますから(苦笑)。

geoやfreewebで使える?

geocitiesではそもそも.htaccessファイル自体を作成することが出来ません。 freewebにおいては.htaccessファイルは作成出来ますが、機能はしていないようです(ErrorDocumentが機能しなかったので他のも恐らくは)。


参考先−ミケネコのhtaccessリファレンス

プログラムTOPへ戻る