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

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

(Last modified: )

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

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

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

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

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

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

<Directory c:/pg/Apache24/htdocs>
  ...
  ...
</Directory>

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

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

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

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

なお httpd.conf では Directory ディレクティブを使った次のような記述があります。(コメント部分は省略しています)。

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

Directoryディレクティブの使い方(1)

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

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

次の例をみてください。

<Directory c:/pg/Apache24/*/img>
  ...
  ...
</Directory>

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

c:/pg/Apache24/doc/img
c:/pg/Apache24/manual/img
c:/pg/Apache24/report/img

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

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

次の例をみてください。

<Directory c:/pg/Apache24>
  Require all granted
</Directory>

<Directory c:/pg/>
  Require all denied
</Directory>

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

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

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

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

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

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

<DirectoryMatch c:/pg/Apache24/htdocs/202(3|4)>
  ...
  ...
</DirectoryMatch>

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

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

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

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。