WEBサイトの制作において、エラーページの表示は重要です。
基本的には、404エラー等は、.htaccess に記述する、ErrorDocument により制御できます。
たとえば、次のように .htaccessに記述します。
ErrorDocument 404 /error/404.html
基本中の基本ですね。ちなみに、遷移先のパスは相対パスにしないと404ステータスにならない場合があります。つまり、絶対パス(URL)ではなく、相対パスにするということです。
他方で、PHPのスクリプトによっても、404ステータスを発行することが可能です。
PHPの場合には、header関数により、次のように記述します。
header("HTTP/1.0 404 Not Found");
http://jp1.php.net/manual/ja/function.header.php
上記の記述により、ブラウザに404ステータスを送出できます。
しかし、ここで大きな問題に直面します。
どういう問題かというと、PHPのheader関数により、404ステータスを送出した場合には、自動的には、/error/404.html には遷移しないのです。
これは、少々、面倒なことになります。
というのも、header(“HTTP/1.0 404 Not Found”); の後に、header(“Location: http://~”); とロケーションを付け足してやるとエラーページに遷移はするものの、ヘッダーステータスが302に変更され、404ではなくなってしまうからです。
この対応策ですが、/error/404.htmlをfile_get_contents ()関数などで、読み込んで、出力するのも一つの方法となります。
header("HTTP/1.0 404 Not Found");
$error_page = file_get_contents('../error/404.html')
echo $error_page;
exit;
こうすることで、一応、ErrorDocumentの場合とPHPの場合で同一の404ファイルを出力することができます。
また、file_get_contentsの代わりに、require_once等でエラーファイルを読み込む方法も考えられます。
なお、取得するファイルのパスは、サイトの構造により修正が必要です。
もっとも、404ファイルを動的に作成している場合には、上手くいかない場合もあるので注意が必要です。
この件で、他に良い方法があれば、コメントください。
以上です。