うまいぼうぶろぐ

linuxとhttpdとperlのメモ

apacheのErrorDocument勘違いしてた

ん?apacheのErrorDocument、というかエラーページの出しかた変わった?当然だけどErrorDocumentのURL自体に、アクセス権がない(IP許可されてない)場合、ErrorDocmentは表示されないんじゃなかったっけ?


例えばこんな設定で、documentroot以下に/errがある場合

ErrorDocument 403 /err/403.html
<Directory /path/to/public_html>
  AllowOverRide all
  Order deny,allow
  Deny  from all
  Allow from 192.168.0.0/24
</Directory>

/err/403.htmlへのアクセスもdenyされるからブラウザには素の403 Forbiddenが出る。なので、別途DirectoryやLocationディレクティブで

<Location /err/>
  AllowOverRide all
  Order deny,allow
  Deny  from all
  Allow from all
</Directory>

とかが必要だった気がする。

apache 2.2.12でごにょごにょ設定してたら、ErrorDocumentのURLにアクセス権限がなくてもエラーページが表示されることに気付いた。なんか気持ち悪いなー、どこか他のとこで許可設定してるんかしら。

追記

違うわ。IP許可されてなくても、エラー用のURLを直接叩くと見れるのか。でもステータスコードはきっちり403だな。しかもapache 2.2.12じゃなくて前からだった。恥ずかし。

$ GET -S http://www.example.com/
GET http://www.example.com/ --> 403 Forbidden
<!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 /
on this server.</p>
<p>Additionally, a 403 Forbidden
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

$ GET -S http://www.example.com/err/403.html
GET http://www.example.com/err/403.html --> 403 Forbidden
403-error-hogehoge