Apache2.0.55のエラーページをカスタマイズ

感想おまちしてます!

エラーページをオリジナルのものにする方法。

スポンサーリンク

Apacheのエラーページカスタマイズ

httpd.confの以下の場所を修正する。

Alias /error/ "C:/root/error/"

ErrorDocument 400 /error/400_HTTP_BAD_REQUEST.html
ErrorDocument 401 /error/401_HTTP_UNAUTHORIZED.html
ErrorDocument 403 /error/403_HTTP_FORBIDDEN.html
ErrorDocument 404 /error/404_HTTP_NOT_FOUND.html
ErrorDocument 405 /error/405_HTTP_METHOD_NOT_ALLOWED.html
ErrorDocument 408 /error/408_HTTP_REQUEST_TIME_OUT.html
ErrorDocument 410 /error/410_HTTP_GONE.html
ErrorDocument 411 /error/411_HTTP_LENGTH_REQUIRED.html
ErrorDocument 412 /error/412_HTTP_PRECONDITION_FAILED.html
ErrorDocument 413 /error/413_HTTP_REQUEST_ENTITY_TOO_LARGE.html
ErrorDocument 414 /error/414_HTTP_REQUEST_URI_TOO_LARGE.html
ErrorDocument 415 /error/415_HTTP_UNSUPPORTED_MEDIA_TYPE.html
ErrorDocument 500 /error/500_HTTP_INTERNAL_SERVER_ERROR.html
ErrorDocument 501 /error/501_HTTP_NOT_IMPLEMENTED.html
ErrorDocument 502 /error/502_HTTP_BAD_GATEWAY.html
ErrorDocument 503 /error/503_HTTP_SERVICE_UNAVAILABLE.html
ErrorDocument 506 /error/506_HTTP_VARIANT_ALSO_VARIES.html

これでエイリアスで指定した「C:/root/error/」にエラーページを置いてやれば独自のエラーページが表示可能。

Apache2ではマルチ言語でエラーページを表示できる。Apache2独自のCGIのようなものも記述できるので、Includeなどを利用してページ分割するのもいい。

オリジナルエラーページが表示されない場合

IEでは512バイト以下のサイズのエラーページだとIE独自のエラーページに置き換えてしまう仕様になっている。これをなくすには

ツール -> インターネットオプション -> 詳細設定 -> ブラウズ
の「HTTP エラーメッセージを簡易表示する」のチェックを外す

ことで対応できるが、全クライアントで設定するのはめんどくさい。
こういう場合は空白文字などでエラーページのサイズを513バイト以上にしてあげるといい。

なんかたまにうまくいかない場合があるけど、httpd.confが読み込めてないのが原因か、再起動を繰り返すとうまくいった。

サンプル

/include/head.html

<!--#set var="MSG" value="Not Found" -->
<!--#include virtual="./include/head.html" -->

ファイルが存在しません。ちなみにミスチルの曲です。

<!--#include virtual="./include/foot.html" -->

/include/foot.html

</p>

<address>
<a href="/"><!--#echo var="SERVER_NAME" --></a> <!--#config timefmt="%c" -->
<!--#echo var="DATE_LOCAL" -->
<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">
webmaster
</a>.
</address>
</body>
</html>

/404_HTTP_NOT_FOUND.html

<!--#set var="MSG" value="Not Found" -->
<!--#include virtual="./include/head.html" -->

ファイルが存在しません。ちなみにミスチルの曲です。

<!--#include virtual="./include/foot.html" -->