すんげー大まかだけど。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のみ?