HTTPステータスコードを送信するタイミング
-
03-07-2019 - |
質問
現在、PHPスクリプトでは、ユーザーが存在しない、またはそのユーザーに属していないコンテンツにアクセスしようとすると、カスタム404 not foundエラーページにユーザーをリダイレクトします。そのように:
header('Location: http://www.mydomain.com/error/notfound/');
exit;
上記のheader()呼び出しは、デフォルトで302リダイレクトステータスコードを送信することを認識しています。
しかし、理解できないのは、404 not foundステータスコードを送信すべきときです。ユーザーをリダイレクトする前に?または、 / error / notfound / ページを表示する場合
ご協力ありがとうございます!
解決
次のようにする必要があります。
header("HTTP/1.0 404 Not Found");
include 'error.php';
die();
他のヒント
404エラーをリダイレクトとして実行することは一切ありません。
本当にやりたいことは、404ステータスヘッダーを送信し、現在の出力を404ページの本文に置き換えることです。
これを行うにはさまざまな方法がありますが、それはサイトの構造にかなり依存します。通常、MVCアプリケーションはこれを転送します。例外をスローする他のシステムを見た後、登録された例外ハンドラーが404ページの表示を処理します。
とにかく、大まかな手順は次のとおりです
- コンテンツが無効であると判断する
- 現在の実行を中断
- 出力がある場合は、出力をクリアします。
- 404ステータスヘッダーを送信
- 404ページのコンテンツを送信します
404とLocation:を一緒に使用することはできません。場所は、一部の応答(201および3xx)に対してのみ有効です
ただし、カスタムHTMLページを404応答の本文として送信できます。
php.netから:
2つの特別な場合のヘッダー呼び出しがあります。 1つ目は、文字列" HTTP /"で始まるヘッダーです。 (大文字と小文字は区別されません)。送信するHTTPステータスコードを特定するために使用されます。たとえば、PHPスクリプトを使用して欠落ファイルの要求を処理するようにApacheを構成している場合(ErrorDocumentディレクティブを使用)、スクリプトが適切なステータスコードを生成することを確認できます。
<?php
header("HTTP/1.0 404 Not Found");
?>
404 HTTPステータスコードを送信する必要があります。ブラウザとクローラーはこれを理解しています。また、サイトの検索フォーム、Soundexリンクなど、何が起こったかを説明するよりわかりやすいエラーページを含めることもできます。
&quot;リダイレクト&quot;および「見つからない」異なる概念です。
どのファイルが見つかりましたか?
http://www.mydomain.com/error/notfound/
または
http://www.mydomain.com/not_exist.html
&quot; http://www.mydomain.com/not_exist.html &quot ;ページには404ヘッダーと「ページが見つかりません」が必要です。内容。
クイックフィックスは次のようになります:
header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;
ただし、これには2つのApacheリクエストが必要で、やや厄介です。