Directoryディレクティブ/DirectoryMatchディレクティブ:設定が適用されるディレクトリを指定する

広告

Directory ディレクティブは、他のディレクティブを使った設定が適用されるディレクトリを指定するときに使用します。また DirectoryMatch ディレクティブは正規表現を使って適用するディレクトリを指定することができます。ここでは Apache の Directory ディレクティブおよび DirectoryMatch ディレクティブの使い方について解説します。

Directoryディレクティブの使い方

Directory ディレクティブは、他のディレクティブを使った設定の適用する範囲をディレクトリ単位で指定する場合に使用します。書式は次のとおりです。

<Directory ディレクトリパス>
  ...
  設定ディレクティブ
  ...
</Directory>

記述できる場所は httpd.conf, VirtualHost です。

ディレクトリを表すパスは絶対パスで指定してください。指定したディレクトリおよびそのサブディレクトリに対してブロック内に記述した設定が適用されます。

例えば d:/Apache/Apache24/htdocs ディレクトリおよびサブディレクトリに対する設定を行いたい場合は次のように記述します。

<Directory d:/pg/Apache/Apache24/htdocs>
  ...
  ...
</Directory>

Windows の場合はドライブからの指定となりますが、実際に試してみたところドライブを省略した場合は Apache をインストールしたドライブが指定されたものとして扱われるようです。よって先ほどの例は次のようにドライブを省略して記述しても問題ありませんでした。

<Directory /pg/Apache/Apache24/htdocs>
  ...
  ...
</Directory>

ルートディレクトリ以下のすべてのディレクトリに対する設定を記述する場合は、ディレクトリに / を指定してください。

<Directory />
  ...
  ...
</Directory>

ワイルドカードを使った指定

ディレクトリの指定には「*」や「?」などのワイルドカードを使った指定も可能です。「*」は任意の文字、「?」は任意の 1 文字にマッチします。(ただしいずれもスラッシュ(/)にはマッチしません)。

次の例をみてください。

<Directory d:/pg/Apache/Apache24/*/img>
  ...
  ...
</Directory>

この場合、次のようなディレクトリ(およびそのサブディレクトリ)がすべて対象となります。

d:/og/Apache/Apache24/doc/img
d:/pg/Apache/Apache24/manual/img
d:/pg/Apache/Apache24/report/img

複数のDirectoryディレクティブがある場合の適用される順番

ディレクトリとそのサブディレクトリに設定をそれぞれ記述した場合、ルートディレクトリからのパス名が短い順に適用され、同じ項目に対する設定はあとから適用された設定で上書きされます。

次の例をみてください。

<Directory d:/pg/Apache/Apache24>
  Require all granted
</Directory>

<Directory d:/pg/Apache>
  Require all denied
</Directory>

最初によりパスの指定が短い d:/pg/Apache ディレクトリに対する設定が適用され d:/pg/Apache ディレクトリおよびサブディレクトリに対して Require all denied (すべてのアクセスを許可しない) が設定されます。次に d:/pg/Apache/Apache24 に対する設定が適用されるため、 d:/pg/Apache/Apache24 は Require all granted (すべてのアクセスを許可する) が適用されます。

DirectoryMatchディレクティブによる正規表現を使ったディレクトリの指定

DirectoryMatch ディレクティブは、基本的な使い方は Directory ディレクティブと同じですがディレクトリパスの指定に正規表現を使用することができます。書式は次のとおりです。

<DirectoryMatch 正規表現を使ったディレクトリ名>
  ...
  設定ディレクティブ
  ...
</DirectoryMatch>

記述できる場所は httpd.conf, VirtualHost です。

設定を適用するディレクトリを正規表現を使って指定します。例えば d:/pg/Apache/Apache24/htdocs/2020 と d:/pg/Apache/Apache24/htdocs/2021 ディレクトリおよびそのサブディレクトリに対して設定を行いたい場合は次のように記述することができます。

<DirectoryMatch d:/pg/Apache/Apache24/htdocs/202(0|1)>
  ...
  ...
</DirectoryMatch>

なお正規表現を使ったディレクトリの指定は Directory ディレクティブでも使用が可能です。正規表現を使用する場合はディレクトリパスの前にチルダ (~) を記述してください。

<Directory ~ d:/pg/Apache/Apache24/htdocs/202(0|1)>
  ...
  ...
</Directory>

正規表現の記述方法については「正規表現入門」を参照されてください。

-- --

Apache の Directory ディレクティブおよび DirectoryMatch ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。