Locationディレクティブ/LocationMatchディレクティブ:設定が適用されるURLパスを指定する

Location ディレクティブは、他のディレクティブを使った設定が適用される URL パスを指定するときに使用します。また LocationMatch ディレクティブは正規表現を使って適用する URL パスを指定することができます。ここでは Apache の Location ディレクティブおよび LocationMatch ディレクティブの使い方について解説します。

(Last modified: )

Locationディレクティブの使い方

Location ディレクティブは、他のディレクティブを使った設定の適用する範囲を URL パスで指定する場合に使用します。書式は次のとおりです。

<Location URLパス名>
  ...
  設定ディレクティブ
  ...
</Location>

記述できる場所は httpd.conf, VirtualHost です。

クライアントからのリクエストのパスの部分が Location ディレクティブで指定した URL パスと一致した場合にブロック内に記述した設定が適用されます。

例えば URL パスが /doc と位置した場合にブロック内の設定を行いたい場合は次のように記述します。

<Location /doc>
  ...
  ...
</Location>

この場合、リクエストのパスの部分が /doc で始まるすべてのリクエストに一致します。例えば次のような URL へのリクエストと一致します。

http://www.example.com/doc/index.html
http://www.example.com/doc/image/back.webp
http://www.example.com/docter/hello.html

URL パスに / だけを指定した場合はすべてのリクエストが必ず一致するので、すべてのリクエストが対象となります。

<Location />
  ...
  ...
</Location>

ワイルドカードを使った指定

URL パスの指定には「*」や「?」などのワイルドカードを使った指定も可能です。「*」は任意の文字、「?」は任意の 1 文字にマッチします。(ただしいずれもスラッシュ(/)にはマッチしません)。

次の例をみてください。

<Location /*/back>
  ...
  ...
</Location>

この場合、次のような URL へのリクエストと一致します。

http://www.example.com/doc/back/old.html
http://www.example.com/manual/back/first.html
http://www.example.com/product/back/img/pen.jpg

Locationディレクティブを使う場合の注意点

通常 http://www.example.com/doc/inex.html というリクエストがあった場合、ドキュメントルート以下の doc ディレクトリに含まれる index.html ファイルがクライアントへ返されます。このファイルに対してアクセスを拒否するために次のように Location ディレクティブを設定したとします。

<Location /doc/index.html>
  Require all denied
</Location>

いっけん問題ないように見えますが、別の URL 形式で同じディレクトリに含まれるファイルへアクセスできる場合、先ほどの Location ディレクティブは適用されず該当のファイルへアクセスが可能になってしまいます。公式ヘルプでは例として大文字を使った例が記述されていましたが、他にもいろいろな方法があるようです。

アクセス拒否される;
http://www.example.com/doc/index.html

アクセス拒否されない;
http://www.example.com/DOC/index.html

その為、実際に存在するディレクトリやファイルへの設定を行う場合には、 Location ディレクティブではなく Directory ディレクティブや Files ディレクティブの使用が推奨されます。

なおクライアントからのリクエスト時に動的に作成されるページを対象とした設定を行う場合などに Location ディレクティブは適しています。

LocationMatchディレクティブによる正規表現を使ったURLパスの指定

LocationMatch ディレクティブは、基本的な使い方は Location ディレクティブと同じですが URL パスの指定に正規表現を使用することができます。書式は次のとおりです。

<LocationMatch 正規表現を使ったURLパス>
  ...
  設定ディレクティブ
  ...
</LocationMatch>

記述できる場所は httpd.conf, VirtualHost です。

設定を適用する URL パスを正規表現を使って指定します。例えば /help/image と /productt/image と /map/iage のいずれかとマッチする URL パスに対して設定を行いたい場合は次のように記述することができます。

<LocationMatch /(help|product|map)/image>
  ...
  ...
</LocationMatch>

なお正規表現を使った URL パスの指定は Location ディレクティブでも使用が可能です。正規表現を使用する場合は URL パスの前にチルダ (~) を記述してください。

<Location ~ /(help|product|map)/image>
  ...
  ...
</Location>

正規表現の記述方法については「正規表現入門」を参照されてください。

-- --

Apache の Location ディレクティブおよび LocationMatch ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。