apache の Location と Directory について

以下のとおり、Location > Directory となる

 

http://httpd.apache.org/docs/2.2/sections.html#page-header

「セクションのマージ方法」

 

ただし、Location と Directory では対象の指定方式に違いがある

ので注意すること。

 

 

ファイルシステムとウェブ空間」より

-----------------------------------------------------------

ファイルシステムコンテナ

<Directory> ディレクティブと <Files> ディレクティブ、それと それらの正規表現版はディレクティブを ファイルシステムの一部分に対して適用します。 <Directory> セクションの 中のディレクティブは指定されたディレクトリとそのすべてのサブディレクトリに 適用されます。.htaccess ファイルを 使うことでも同じ効果を得ることができます。例えば、次の設定では /var/web/dir1 とすべてのサブディレクトリに対して ディレクトリインデックスを行ないます。

 

<Directory /var/web/dir1>

Options +Indexes

</Directory>

 

::

 

ウェブ空間コンテナ

一方、<Location> ディレクティブとその正規表現版はウェブ空間上の内容に対して設定を変更します。 たとえば、次の設定では /private で始まる URL パスへのアクセスを制限します。 具体的には、 http://yoursite.example.com/private, http://yoursite.example.com/private123, http://yoursite.example.com/private/dir/file.html へのリクエストや、 他の同様に /private 文字列で始まるリクエストに 適用されます。

 

<Location /private>

Order Allow,Deny

Deny from all

</Location>

-----------------------------------------------------------

 

一例として、/var/www/html/test (ファイルシステム上) へのアクセス

制御は以下になる。

 

-----------------------------------------------------------

<Location /test>

Order allow,deny

Allow from all

</Location>

 

<Directory /var/www/html/test>

Order allow,deny

Allow from badguy.example.com

Deny from all

</Directory>

-----------------------------------------------------------

Location にある /test の指定が Directory より優先される。

/var/www/html/test への接続が可能になる。

 

 

-----------------------------------------------------------

<Location /var/www/html/test>

Order allow,deny

Allow from all

</Location>

 

<Directory /var/www/html/test>

Order allow,deny

Allow from badguy.example.com

Deny from all

</Directory>

-----------------------------------------------------------

Location にある /var/www/html/test の指定では /var/www/html/test (ファイルシステム上) への指定が有効にならない。

 

このため、Directory のみ有効で、/var/www/html/test への接続は不可能。