読者です 読者をやめる 読者になる 読者になる

うまいぼうぶろぐ

linuxとhttpdとperlのメモ

apacheのlocationのdocument間違ってる??

apache

あれー勘違いかな。今さらながら初歩的なところに疑問が。

ここのmanualにあるように、

<Location /private>
Order Allow,Deny
Deny from all
</Location>

と設定すると、/privateから始まるURL

がLocationの設定の対象なので、上の設定だと全て403で制限されると書いている。で、自分も今までそう思ってた。


けど実際にやってみると/privateは制限されるけど、/private123は制限されないような。

cd /path/to/docroot
echo test  > test
echo test2 > test2
<Location /test >
  deny from all
</Location>
  • 実験
$ curl http://example.com/test
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /hogetest
on this server.</p>
</body></html>
$ curl http://example.com/test2
test2

/testは見れないけど、/test2は見れる。document通りなら/test2も見れないと思うんだけど。テスト用に一から書いたhttpd.confだから他に余計な設定入ってないしなー。何か勘違いしてるんだろうか。

おまけ

LocationじゃなくてLocationMatchで

<LocationMatch ^/test >
  deny form all
</LocationMatch>

と書けば/testだけじゃなくて、/test2も制限される。まー正規表現で書いてるんだから、これは当然だと思うけど。