Apache -オリジナルエラーページを作る-

05/01/05

404エラーの時に表示させるエラーページをオリジナルなものに変えてみましょう。
とはいっても、このやり方は結構あちこちで見かけると思います。
で、今回は「PHP」を使って行います。

まず、「ドキュメントルート」(Vineでは、「/home/httpd/html」)以下に、「error」というディレクトリを作成します。

その中に、以下のような、たとえば、「error.inc」として以下のような(もちろん、この部分はオリジナルで作成)内容のファイルを作成します。

<?
print <<<EOF
<html>
<head><title>${title}Error</title></head>
<body>$error_msg</body>
</html>
EOF;
?>

で、次に、同じディレクトリに、以下のようなPHPスクリプトを作成。名前は、「error.php」とします。

<?
$errorNo[0] = 401;
$errorMsg["401"] = "認証エラーです。<BR>IDが間違っているか、パスワードが間違っているか、あるいはこのファイルにアクセスする権限がありません。";
$errorNo[1] = 404;
$errorMsg["404"] = "ファイル・ディレクトリにアクセスできません。<BR>削除されたか、移動したか、あるいはアドレスが間違っている可能性があります。<BR>もう一度、アドレスを見直すか、管理人に連絡してください。";
$errorNo[2] = 403;
$errorMsg["403"] = $errorMsg["404"];

if ($_GET["no"]){
  if (in_array($_GET["no"],$errorNo)){
  $error_msg = $errorMsg[$_GET["no"]];
  ${title} = $_GET["no"];
  
  include("./error.inc");
 }
}
?>

ここで、

$errorMsg["403"] = $errorMsg["404"];

と、したのは、ここで「test」ではじまるファイルには、アクセスさせないような設定をしましたが、この設定の場合「test」ではじまるファイルにアクセスした場合、「403エラー」つまり、「このアクセスにアクセスするパーミッション(権限)がありませんよ。」と表示されてしまいます。(英語だけどネ)
このままでもいいのですが、「あ、ここにアヤシいファイルがあるんだな」ということは、判明してしまいます。
ので、「403エラー」も、「404エラー」にしてしまおう。といった設定です。ここは、必要に応じて設定してください。

ここまでできたら、次に「/etc/httpd/conf/httpd.conf」に、以下の記述を付け足します。一番最後に足していいと思います。

#エラーページ
ErrorDocument 401 /error/error.php?no=401
ErrorDocument 404 /error/error.php?no=404
ErrorDocument 403 /error/error.php?no=403

これで「Apache」を起動し直せば、各エラーをオリジナルなエラーページとして表示させることができます。

この、「error.php」ですが、「/home/httpd」以下に「error」というディレクトリを作って、「httpd.conf」に

ErrorDocument 401 ../error/error.php?no=401

という風にしたんですけど、これはできませんでした・・。
どうやら、「/home/httpd/html」以下じゃないと出来ないようです。

この「error.php」は、「httpd.conf」に記述した「?no=401」を見てもわかるとおり、普通に
「/home/httpd/html/error.php」
に、アクセスした場合と何ら代わりありません。
よって、「error.php」を改良すれば、もっとおもしろい・便利なものができると思います。
たとえば・・・、とあるページの認証エラーだったら、○○のページを表示させるとかね。

目次

Apacheの設定

・ローカルだけアクセス

・ワームアタックをログに記録しない

・オリジナルエラーページを作る


メインページ

■最近観た映画3

 


■ここがサブタイトル