How Directory, Location and Files sections work

### Apache HTTP Server

# Directory, Location, Files セクションの動作方法

セクション `<Directory>`, `<Location>`, `<Files>` には、それぞれ指定されたディレクトリ、URL, ファイルにのみ適用されるディレクティブを書くことができます。 また、ディレクトリにディレクティブを適用するためにディレクトリ中に .htaccess ファイルを使用することもできます。このドキュメントは これらのセクションの違いを説明し、それらと、ディレクトリや リクエストされた URL に Apache がどのディレクティブを 適用するかを決定する方法との関係を説明します。

## セクション中に許可されているディレクティブ

構文上 `<Directory>` に書けるものはすべて `<Location>` にも書くことができます (`<Files>` セクションは例外です)。しかし、中には `AllowOverride` や `FollowSymLinks` と `SymLinksIfOwnerMatch` という二つのオプションのように、`<Location>`, `<LocationMatch>`, `<DirectoryMatch>` 中では意味のないものもあります。 同様のことが `<Files>` にも言えます。構文的にはすべて大丈夫ですが、 意味的にはそうでないものもあります。

## セクションのマージ方法

マージの順番は以下のようになっています:

1. `<Directory>` (正規表現無し) と .htaccess を同時に (.htaccess が許可されていれば、それが `<Directory>` を 上書きします)
2. `<DirectoryMatch>` と正規表現のある `<Directory>`
3. `<Files>` と `<FilesMatch>` を同時に
4. `<Location>` と `<LocationMatch>` を同時に

`<Directory>` 以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。 `<Directory>` (上のグループ 1) はディレクトリが短いものから長いものへと処理されます。複数の `<Directory>` セクションが同じディレクトリに 適用される場合は、設定ファイル中の順番に従って処理されます。 設定ファイルは httpd.conf, srm.conf, access.conf の順に処理されます。`Include` によって挿入された設定は 挿入しているファイルの `Include` ディレクティブの位置にあったかのように扱われます。

`<VirtualHost>` セクション中のセクションは バーチャルホストの定義の外側の対応するセクションの 後に適用されます。これによりバーチャルホストが メインのサーバ設定を上書きできるようなります。(注意: これは 1.2.2 以降と 1.3a2 以降でのみ正しく動作します。 これらのリリースより前のものはバーチャルホストの中のセクションは メインサーバの前に適用されていました)。

後のセクションのディレクティブが前のセクションのものを上書きします。

## セクションを使う際の注意

一般的なガイドラインは:

- ファイルシステムレベルでオブジェクトのマッチを行なうときは、 `<Directory>` と `<Files>` を使う必要があります。
- URL レベルでオブジェクトのマッチを行なうときは `<Location>` を使う必要があります。

重要な例外は:

- プロキシの制御は `<Directory>` を通して行なわれます。これはプロキシが `<Location>` より前から存在したことによるミスです。将来の設定言語ではおそらく `<Location>` に切り替えられるでしょう。

.htaccess ファイルの解析に関する注意:

- Location 中で .htaccess の解析方法を変更しても、 何も変わりません。.htaccess の解析は既に終わっているからです。

`<Location>` とシンボリックリンク:

- "`Options FollowSymLinks`" や "`Options SymLinksIfOwnerMatch`" は `<Location>`, `<LocationMatch>`, `<DirectoryMatch>` セクションでは使うことができません (それらのオプションは単に無視されます)。それらのオプションは `<Directory>` セクション (もしくは `.htaccess` ファイル) の中でのみ使用可能です。

`<Files>` と `Options`:

- Apache はこの状況はチェックしませんが、 `<Files>` セクションの中で `Options` ディレクティブを使用しても効果はありません。

他の注意:

- 実際には、名前を変換する段階 (URL をファイル名にマップするために `Alias` や `DocumentRoot` が使用されるところ) の直前に `<Location>`/`<LocationMatch>` が行なわれます。 これらを適用した結果は変換が終わった後に完全に捨てられます。

### Apache HTTP Server