[ホーム] -> [Aache + PHP + PostgreSQL 実験室] |
特別なディレクティブとして、範囲指定が出来るディレクティブがあります。条件にマッチしたもののみ、その中の設定が適用されます。まあ、プログラミング言語で言う IF 文みたいなものですね。適切に使うと便利だし、Directory
などのように必ずと言っていいほど使うものもあります。
module-name
が利用可能であると、これで囲まれた間の設定が有効になります。LoadModule
でモジュールがロードされているか、コンパイル時に組み込んでいる場合かです。つまり、モジュール固有の設定を、これで囲んでおくことで、そのモジュールを無効にした場合などに httpd.conf
を修正しなくてすむようになります。module-name
は大抵、mod_???.c
となっています。module-name
の前に !
を付けると逆の動作になり、モジュールが利用できない場合となります。このディレクティブはネストすることが出来ます。
httpd
起動時に、-D
オプションで define-name
が指定されたとき、これで囲まれた間の設定が有効になります。例えば、httpd -DSSL
と実行された場合、<IfDefine SSL>
と指定されていれば、そこが有効になります。define-name
の前に !
を付けると逆の動作になり、オプションが指定されていない場合となります。このディレクティブはネストすることが出来ます。
path
で指定されたディレクトリ以下にある、ファイルやディレクトリに対するアクセスに対しての設定を行います。あるディレクトリ以下はパスワードの認証が必要、とか、こっちのディレクトリは CGI を置いておく、などと言った設定を行うときに利用します。path
には、?
と *
のワイルドカードが利用できます。?
は何か一文字に、*
は任意の文字列にマッチします。/home/*/public_html
と指定すれば、/home/hizuya/public_html
や、/home/dareka/public_html
などにマッチします。このディレクティブはネストできません。
これも上と同じでディレクトリに対しての設定ですが、ディレクトリを正規表現で表せます。
これは、リクエストの URL が、url
以下のファイルやディレクトリに対してのだった場合に、これで囲まれた間の設定が有効になります。リクエストの文字列を見るので、物理的にどのファイルにアクセスされるかは関係ありません(物理的なファイルが存在しなくても大丈夫)。例えば <Location "/access-list">
とすると、http://サーバ名/access-list
というアクセスにマッチします(これに対応するファイルがあるかは関係ない)。これも、?
と *
のワイルドカードが利用できます。このディレクティブはネストできません。
上と同じリクエストの URL を対象にしますが、URL を正規表現で表せます。
file-name
に対してアクセスがあった場合に、これで囲まれた間の設定が有効になります。これはファイルのあるディレクトリは関係なく、ファイル名だけで制御します。例えば、<Files "*.html">
と指定した場合、拡張子が html
のファイルにマッチします。これも、?
と *
のワイルドカードが利用できます。このディレクティブはネストできません。
上と同じファイル名を対象にしますが、ファイル名を正規表現で表せます。
バーチャルホストの設定を行います。バーチャルホストについては、後で別途説明しているので、そちらを参照してください。
method
には、HTTP のメソッドがスペースで区切って複数指定できます。現在、GET, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK
が指定できるようです。リクエストのメソッドがここで指定されていた場合、これで囲まれた間の設定が有効になります。あるメソッド以外を禁止したい場合などは、これを使うより次の LimitExcept
をお勧めします。このディレクティブはネストできません。
上と同じように、method
には、HTTP のメソッドがスペースで区切って複数指定できます。リクエストのメソッドがここで指定されてもの以外の場合、これで囲まれた間の設定が有効になります。例えば <LimitExcept GET POST>
とし、間に Deny from all
と書いておけば、GET と POST 以外のアクセスはすべて禁止されます。
<Directory>, <Location>, <Files>
は非常に似ているのが分かったかと思いますが、適用される順番があります。<Directory>
の正規表現付きについては説明していませんが、<DirectoryMatch>
を使うようになっていますので、気にしないでください。
<Directory>
(正規表現無し)と .htaccess
を同時(.htaccess
で上書きできるように指定してあった項目は、.htaccess
で上書きされる)
<DirectoryMatch>
と正規表現付きの <Directory>
<Files>
と <FilesMatch>
を同時
<Location>
と <LocationMatch>
を同時
正規表現が使えるものに関しては、マニュアルによると「Perl のサブセット」ということらしいです。一応、「. ? * + ^ $ [ ] ( | ) {}
」が使えることは確認しています。