【Apache】コンテキストとは?ディレクティブとは?
Apacheを利用すると、コンテキストであったり、ディレクティブであったりという用語に出くわします。
以下ではコンテキストとは?ディレクティブとは?について例を交えて紹介します。
Apache – コンテキストとは?
コンテキストの種類には、主に以下の4種類あります。
- サーバ設定ファイル(httpd.conf, srm.conf, access.confなど)
- バーチャルホスト(VirtualHostタグ内で使用可能)
- ディレクトリ(Directoryタグ、Locationタグ、Filesタグなど)
- .htaccess(.htaccessファイル内で使用可能)
サーバ設定ファイル
サーバ設定ファイルというのは、主にhttpd.confを意味します。
他にもsrm.conf, access.confなどのサーバー設定ファイルがあります。
たとえば、Aliasのコンテキストは、サーバー設定ファイル、バーチャルホストです。
バーチャルホスト
バーチャルホストはつまり仮想ソフトのことです。
一つのサーバー上で、複数のサーバーがあるように見せることができます。
Apacheを使えば、一つのサーバーで、複数のドメインを持つことができます。
たとえば、Aliasのコンテキストは、サーバー設定ファイル、バーチャルホストです。
ディレクトリ
ディレクトリは、設定ファイルのコンテキストで使用できるディレクティブのことです。
Directory、Location、Files、proxyといったものです。
とくにセクションを表すディレクティブであるDirectoryはよく使います。
Directory
<Directory ディレクトリ>
</Directory>
<Directory ~ "正規表現">
</Directory>
Directoryタグは、指定のディレクトリとサブディレクトリにのみ適用されるディレクティブを定義することができます。
Directoryタグのコンテキストは、公式サイトのドキュメントにかかれている通り、サーバ設定ファイルかバーチャルホストとなります。
Directoryタグの中に記載できるディレクティブのコンテキストは、Directoryと記載されています。
上のDirectoryで囲まれた部分を、「セクション」や「セクションコンテナ」と呼びます。
表示ファイルを制御するDirectoryIndex
<Directory /path/>
DirectoryIndex index.html index.php
</Directory>
DirectoryIndexは、Directoryに対してアクセスがあった際に、どのファイルを表示するかを制御できます。
デフォルトでは、index.htmlやindex.phpなどが指定されています。
そのため、上のディレクトリにアクセスがあった場合は、上のファイルを探しに行って、どちらかが表示されます。
<Directory /path/>
DirectoryIndex sample.html
</Directory>
上のようにすると、ファイル名の指定がない場合は、sample.htmlを探しに行くことになります。
※httpd.confを編集して動作確認する場合は必ずApacheを再起動する必要があります。
<Directory /path/>
DirectoryIndex sample.html
options -Indexes
</Directory>
ディレクトリにアクセスした場合、ファイルがないときはリストが表示されますが、optionsで-Indexes、つまりリストを無効化することができます。マイナスで無効化、プラスで有効化できます。
options Indexesとすれば、optionsの中でIndexesだけ、つまりリストだけを有効にして表示されます。
Directoryの正規表現
パールの正規表現になります。
ただPHPの正規表現とほとんど同じです。
Location
<Location URLパス>
</Location>
Locationのコンテキストは、公式サイトのドキュメントにかかれている通り、サーバ設定ファイルかバーチャルホストとなります。
Directoryとだいたい同じことができますが、URLパスを記述することになります。
Directoryのほうがよく使われます。
Locationの中に記載できるディレクティブのコンテキストは、Directoryと記載されています。
.htaccess
.htaccessは、.htaccess内でのみ使用可能なディレクティブを表します。
.htaccessはApacheのサーバーを使うとよく編集するファイルになるため、.htaccessの書き方と基本的な意味を理解するを参考にしてみてください。
ディレクティブとは?
ディレクティブによって使えるコンテキストが決まります。
サーバ設定ファイルにかかれているディレクティブに関しては、上のサーバー設定ファイルに記述できます。
たとえば、Aliasのコンテキストは、サーバー設定ファイル、バーチャルホストのためDirectoryタグの中では使うことはできません。
使えるコンテキストは、下のApacheの一覧にて確認することができます。
Apacheのディレクトリの一覧は、公式サイトで確認できます。
https://httpd.apache.org/docs/2.4/mod/quickreference.html