PHPで500 Internal Server Errorを発生させ、Apacheのエラーページを表示させる。

PHP で 500 Internal Server Error404 Page Not Found という Apache のエラーを発生させるにはどうしたらよいでしょうか?

500 Internal Server Errorについては、次のコードを試してみました。

header("HTTP/1.0 500 Internal Server Error");

しかし、それは私に空白のページを表示します。 どうすれば、Apacheのデフォルトフォーマットでエラーを表示できますか?

ご指導お願いします。

Apache のエラー文書を Web ルートにコピーして (あるいはシンボリックリンクして) header() を使ってエラーコードを設定し、それらの文書を出力することができます。おそらく、やむを得ない理由がない限り、これがベストでしょう。しかし、それがうまくいかない場合、いくつかの代替手段があります(とはいえ厄介な代替手段ですが)。

500の場合、あなたのコードにバグを仕掛けるだけです。

<?php throw new Exception('Nooooooooooooooo!'); ?>

PHPスクリプトは例外を発生させ、通常のApache 500エラーページを生成します。(ただし、PHP initの設定 display_errors0 に設定されている場合のみ、Apacheのエラーになるという注意点に注意してください。ほとんどの開発環境では、これは当てはまりません。ほとんどの開発環境では、これはあてはまりません。実運用サーバーの設定がわからない場合は、これが動作するかどうかをテストする必要があります)。

404の場合は、存在しないページにリダイレクトするのが精一杯だと思います。これは全く同じものではありませんが、あなたの目的には適しているかもしれません。

<?php header("Location: /i-dont-think-therefore-i-am-not"); ?>

ほとんどのブラウザでは、ユーザーは実際にリダイレクトを見ることはなく、ただ静かに素早く存在しないページにリダイレクトされ、結果として通常のApache 404エラーになります。もちろん、URLは変更されているので、それに気づくユーザーもいるかもしれません。もしそれが受け入れられないなら、おそらく Apache mod_rewrite を使って url のバックエンドを存在しない場所に書き換えて、同様の結果を得ることができます。

いくつかのコメントへの返答です。header()` (または他の方法) を使ってレスポンスコードを設定しても、 Apache の標準的なエラードキュメントは生成されません。それは単にあなた自身の出力と一緒にそのレスポンスコードを返します。これは意図的な動作であり、カスタムエラー文書を持つことができるように、 あるいはどのようなリクエストに対しても HTTP の仕様に従ったレスポンスコードを設定できるように設計されています。もしあなたが Apache エラー文書が欲しいなら、それらを偽造するか(単にエラー文書をあなたのウェブルートにコピーするという私の最初の提案のように)、またはそれらを返すように Apache を騙さなければなりません(私のバックアップの提案のように)。

解説 (22)
ソリューション

このような知識豊富な議論の後、私はデフォルトの500 Internal Server Errorを表示できるPHPコードはないと思っています。 解決策は 1.phpファイルの隣にhttp500というフォルダを作成する。
2.2. その中に .htaccess ファイルを作成し、次のコードを追加します。

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} - dd.-d
    RewriteRule ^])(.(*/
    RewriteRule ^])((a-zA

3.PHPのリダイレクトコード:

header('location : http500/');

解説 (5)

どうやら http_response_code という関数があるようで、それを使えばレスポンスコードを適切に設定できるようです。もしそれがうまくいかない場合(ドキュメントにはSVNにしかないとの注記があります)、header関数はオプションでレスポンスコードを引数として取ることができます。

header("HTTP/1.0 ...", true, 404);

これは Apache に正しくシグナルを送るはずです。

解説 (12)