2.5 アクセス制御ファイル
アクセス制御を定義するアクセス制御ファイルです。
説明
アクセス制御ファイル(.htaccess)を特定のディレクトリー下に作成すれば、そのディレクトリーに対するアクセス権を設定できます。
アクセス制御ファイルの名称は、AccessFileNameディレクティブで指定します。デフォルトは.htaccessです。
アクセス制御ファイルによるアクセス制御は、Webサーバを再起動することなく、有効になります。ただし、正しく機能させるためには、httpsd.confのAllowOverrideディレクティブを適切な上書き許可レベルに設定する必要があります。
アクセス制御ファイルにパスワードファイルを指定すると、ユーザーがそのディレクトリーにアクセスする場合にユーザー名およびパスワードの入力を要求します。
アクセス制御ファイル(.htaccess)とパスワードファイル(.htpasswd)は1対1である必要はありません。異なるアクセス制御ファイルのAuthUserFileディレクティブに同じパスワードファイルを指定できます。
書式
ディレクティブの記述規則を次に示します。
- 正規表現
-
ディレクティブの指定に使用できる正規表現を次に示します。
記号
機能
使用例
使用例の意味
.
任意の1文字。
a...c
aのあとに任意の3文字とcが続く。abcdcは適合する。
*
直前の1文字の0個以上の繰り返し。
ab*cd*
ac、abbbbc、abbbbcdは適合する。
+
直前の1文字の1個以上の繰り返し。
ab*c+
abbbcは適合する。abbbは適合しない。
?
直前の1文字があるかないか。
abbbc?
abbbc、abbbは適合する。
|
選択肢の区切り。
a|bc|d
a、bcまたはd。
\
直後の特殊文字(. ^$*+?|\[](){})の1文字。ただし、\を表す場合は\\\。
\.
.と適合する。
\\\
1文字の\と適合する。
^
行の先頭に適合する。
^ab
abcdeは適合する。
$
行の末尾に適合する。
abc$
aaabcは適合する。
{m}
直前の正規表現のm個の繰り返し。
a{5}
aaaaaが適合する。
{m,}
直前の正規表現のm個以上の繰り返し。
a{3,}
aaa、aaaaは適合する。aaは適合しない。
{m,n}
直前の正規表現のm個以上n個以下の繰り返し。
a{3,5}
aaa、aaaa、aaaaaが適合する。aa、aaaaaaは適合しない。
[文字列]
文字列にある任意の1文字。※
[abc]*または[a-c]*
aaa、bbb、ccc、cba、aabは適合する。
[^文字列]
文字列にない任意の1文字。
[^0-9]
数字以外の1字が適合する。
(文字列)
文字列をグループ化する。
(ab)+
abababが適合する。ababbは適合しない。
aa(xx|yy)bb
aaxxbb、aayybbが適合する。
- 注※
-
次の3文字は、[文字列]で特殊な意味を持ちます。
^:[の次に指定して、文字列に含まれないものを示すために用います。
]:文字列の最後を示すために用います。
-:範囲を指定するために用います。
また、これら特殊文字の前の\は省略されます。
[文字列]で特殊な意味を持つ文字を通常の文字として指定するには、次のようにします。なお、次の4つ以外の特殊文字は、通常の文字として扱われます。
^ :文字列の先頭以外で指定します。(例)[ab^yz]
]:文字列の先頭に指定します。(例)[]abxy]
-:最後に指定します。(例)[abxy-]
\:\\\と指定します。(例)[\\\abxy]
- ディレクティブに指定するパス情報
-
ディレクトリー名、ファイル名またはパス名を指定するディレクティブの場合、ディレクティブの種類によって、指定できるパス情報が異なります。
パスの種類には、次のものがあります。各ディレクティブのパス情報は、各ディレクティブで説明します。
-
絶対パスしか指定できません(ドライブ名を付けた指定も絶対パスに含まれます)。
-
ServerRootディレクティブの指定値からの相対パスで指定できます(ただし、ServerRootディレクティブの指定が先に必要)。
また、パス情報にネットワーク上のディレクトリーやファイルを指定することはできません。ネットワークを使用したファイルシステム上のディレクトリーやファイルを指定することもできません。
-
- コメント行
-
設定ファイル中、行の最初に#を付けると、コメント行になります。ただし、ディレクティブを指定したあとに#から始まる文字列を記述しても、#以降をコメントとして扱いません。
コメント行を指定する場合の記述例を次に示します。
-
正しい例
#Deny from all
#行はコメント行として扱われます。
-
誤った例
Deny from all #comment
#commentはディレクティブ指定値として扱われます。コメントとしては扱われません。
-
- IPv6アドレスを指定するときの注意
-
ディレクティブにIPv6アドレスを記述する場合は、「[IPv6アドレス]」のようにIPv6アドレスを[ ]で囲んで指定してください。また、ディレクティブにIPv6アドレスとポート番号を併記する場合は、「[IPv6アドレス]:ポート番号」のようにIPv6アドレスを[ ]で囲み、「:」の後ろにポート番号を指定します。
ただし、次のディレクティブにIPv6アドレスを記述する場合は、IPv6アドレスを[ ]で囲まないで指定してください。
-
Allow fromディレクティブ
-
Deny fromディレクティブ
-
HWSSetEnvIfIPv6ディレクティブ
IPv6アドレスを指定する場合は、グローバルユニキャストアドレスを指定してください。
-
格納先
アクセス制御するディレクトリー
記述例
次のようなディレクトリー構成で、各ディレクトリーに対してアクセス制御ファイルにアクセス権を設定します。
[user001のpublic_html] | +-[auth]--+-.htaccess | +-index.html | +-[test1]-+-.htaccess | +-.htpasswd (user001/test1) | +-index.html | +-[test11]-+-.htaccess | | +-.htpasswd (user001/test11) | | +-index.html | | | +-[test12]-+-index.html | +-[test121]-+-.htaccess | +-index.html | +-[test2]-+-.htaccess +-.htpasswd (user001/test21,user002/test22,user003/test23) +-.groupfile(mygroup: user001 user002) +-index.html
- (例1)authディレクトリー下のアクセス権の定義(auth/.htaccessファイル)
-
IPアドレスが172.18.102.11および172.16.202.4のサーバからのアクセスを拒否します。
Order deny,allow ...1. Deny from 172.18.102.11 172.16.202.4 ...2.
-
アクセス拒否の定義を先に評価
-
アクセス拒否の定義
-
- (例2)test1ディレクトリー下のアクセス権の定義(test1/.htaccessファイル)
-
ユーザー名=user001、パスワード=test1を入力した場合だけ、test1/index.htmlおよびtest1/test12/index.htmlへのアクセスを許可します。
AuthUserFile C:/user001/public_html/test1/.htpasswd ...1. AuthName "test1 Directory" ...2. AuthType Basic <Limit GET POST> ...3. Require user user001 ...4. </Limit>
-
パスワードファイルに登録しているユーザー名(user001)およびパスワード(test1)の定義
-
realm名の定義
-
メソッドに対する定義
-
ユーザー名:user001のアクセスを許可
-
- (例3)test1/test11ディレクトリー下のアクセス権の定義(test1/test11/.htaccessファイル)
-
ユーザー名=user001、パスワード=test11を入力した場合だけ、test1/test11/index.htmlへのアクセスを許可します。
AuthUserFile C:/user001/public_html/test1/test11/.htpasswd ...1. AuthName "test11 Directory" ...2. AuthType Basic <Limit GET POST> ...3. Require user user001 ...4. </Limit>
-
パスワードファイルに登録しているユーザー名(user001)およびパスワード(test11)の定義
-
realm名の定義
-
メソッドに対する定義
-
ユーザー名:user001のアクセスを許可
-
- (例4)test1/test12/test121ディレクトリー下のアクセス権の定義(test1/test12/test121/.htaccessファイル)
-
ユーザー名=user001、パスワード=test1を入力し、WebブラウザーがMSIEの場合だけ、test1/test12/test121/index.htmlへのアクセスを許可します。
Order deny,allow ...1. Allow from env=MSIE ...2. Deny from all ...3.
-
アクセス拒否の定義を先に評価
-
WebブラウザーがMSIEの場合、アクセスを許可
-
すべてのホストからのアクセスを拒否
ただし、httpsd.confに次のディレクティブを定義しているものとします。
SetEnvIf User-Agent ".*MSIE.*" MSIE
-
- (例5)test2ディレクトリー下のアクセス権の定義(test2/.htaccessファイル)
-
mygroupグループのユーザー名、パスワードを入力した場合だけ、test2/index.htmlへのアクセスを許可します。
AuthUserFile C:/user001/public_html/test2/.htpasswd ...1. AuthGroupFile C:/user001/public_html/test2/.groupfile ...2. AuthName "test2 Directory" ...3. AuthType Basic <Limit GET POST> ...4. Require group mygroup ...5. </Limit>
-
パスワードファイルに登録している次の情報の定義
ユーザー名:user001、パスワード:test21
ユーザー名:user002、パスワード:test22
ユーザー名:user003、パスワード:test23
-
グループファイルに登録しているグループ名(mygroup)およびmygroupに登録しているユーザー名(user001、user002、user003)の定義
-
realm名の定義
-
メソッドに対する定義
-
グループ名「mygroup」のアクセスを許可
-