apacheのDirectoryとLocationディレクティブの違い

すんげー大まかだけど。Directoryはディレクトリ名、LocationはURL名に関する設定。基本的に同じ。ただし、AllowOverRideなどのように、Directoryでしか使えない設定もある*1

Directory

指定のファイルシステムのディレクトリとサブディレクトリとのみに 適用されるディレクティブを囲む

DirectoryMatchだとpath名に正規表現が使える。

<Directory /hoge/fuga>

とすると/hoge/fugaディレクトリに対しての設定になる。頭の/がなかったらDocumentRootからの相対パス

Location

囲んだディレクティブをマッチする URL のみに適用

LocationMatchだとURLを正規表現で表せる。

<Location /hogehoge >

と指定すると、リクエストのURLがhttp://servername/hogehoge に対しての設定になる。

Locationを使うとき

ディレクティブは ファイルシステム外のコンテンツにディレクティブを適用するときに 使用してください。ファイルシステムに存在するコンテンツに対しては、 を使ってください。 例外は、 で、これはサーバ全体に対して 設定を適用する簡単な方法です。

ファイルシステム外のコンテンツとは

有名なのはserver-status。

<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny  from all
 Allow from 192.168.0.1
</Location>

他にはmod_proxyで特定URLをアプリケーションサーバに飛ばすときとかかな。

<Location /app >
  ProxyPass http://app.example.com/app keepalive=off loadfactor=10
</Location>

*1:AllowOverRideがLocationで使えないのはapache2のみ?