コードのどこかにheader('HTTP/1.0 404 Not Found');
がありますが、なんらかの理由でApacheのデフォルト404ページにリダイレクトされません。phpで404ヘッダーを送信すると、Apacheエラーが404エラーを表示しないのはなぜですか?
すべてのリクエストをindex.phpにリダイレクトする.htaccessファイルにリライトルールがあります。それが問題だろうか?
コードのどこかにheader('HTTP/1.0 404 Not Found');
がありますが、なんらかの理由でApacheのデフォルト404ページにリダイレクトされません。phpで404ヘッダーを送信すると、Apacheエラーが404エラーを表示しないのはなぜですか?
すべてのリクエストをindex.phpにリダイレクトする.htaccessファイルにリライトルールがあります。それが問題だろうか?
ヘッダーは、Apacheに404ページを表示するように指示するものではありません。むしろ、の場合、 Apacheがその404ページを表示すると、404ヘッダーも一緒に送信されます。ヘッダーは、サーバーではなくブラウザの意味を持ちます。表示する適切なファイルが見つからない場合、Apacheは404を表示します。 PHPスクリプトを使用しているので、Apacheはすでに表示できるファイルを見つけているため、404ページは表示されません。
PHPによって送信されたヘッダーは、この場合は実際にブラウザにのみ関係します。 Apacheはすでにページを処理しているため、独自のページを作成することはありません。また、何かを送信した場合は、2つが衝突します。
はい、.htaccess
ファイルは、あなたのルールはApacheが、それはもはや
404
エラーを持っていないと思わせるので、それが表示するページを発見したため、エラーページを示すからのApacheを停止する予定です。
ヘッダーを送信することは実際には「ステータスメッセージ」のみであり、ブラウザまたはサーバーに特定のページを表示させることはありません。 (ほとんどのブラウザがそうですが)。
Davがコメントで指摘したように、独自のカスタムエラーページに404エラーを送信する必要があります。
私は自分自身の "ページが見つかりません"ページにリダイレクトする必要がありますか? –
はい、そういうメッセージを表示したいのなら、それは一般的にPHPアプリケーションの動作です。 – Amber
リダイレクトしないでください。スペルミスを修正するのがずっと難しくなります。ただ404ページを提供し、それを完了しました。 – TRiG