136

私のファイルは、内部エンドポイント.htaccessからのすべてのリクエストを処理します。次に、PHP スクリプトは、要求されたページがページの配列に含まれているかどうかを確認します。/word_here/page.php?name=word_here

そうでない場合、どうすればエラー 404 をシミュレートできますか?

ErrorDocumentこれを試しましたが、404ページが表示されませんでし.htaccessた。

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");

エラー 404 ページにリダイレクトするのは間違っていると考えるのは正しいですか?

4

9 に答える 9

214

404 ページを生成するための最新の回答 (PHP 5.4 以降) は、次を使用することhttp_response_codeです。

<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();

die()厳密には必要ありませんが、通常の実行を続行しないようにします。

于 2017-01-11T14:28:26.053 に答える
92

あなたがしていることはうまくいき、ブラウザは 404 コードを受け取ります。それがしないのは、あなたが期待しているかもしれない「見つかりません」ページを表示することです。

見つかりません

要求された URL /test.php がこのサーバーで見つかりませんでした。

これは、PHP が 404 コードを返したときに Web サーバーがそのページを送信しないためです (少なくとも Apache は送信しません)。PHP は、独自の出力をすべて送信する責任があります。したがって、同様のページが必要な場合は、HTML を自分で送信する必要があります。たとえば、次のようになります。

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include("notFound.php");
?>

これを httpd.conf に入れることで、Apache が独自の 404 メッセージに同じページを使用するように設定できます。

ErrorDocument 404 /notFound.php
于 2009-09-04T19:50:01.510 に答える
27

これを試して:

<?php
header("HTTP/1.0 404 Not Found");
?>
于 2009-09-04T19:36:11.647 に答える
5

ヘッダーを送信した後に die() することを覚えていましたか? 404 ヘッダーは処理を自動的に停止しないため、さらに処理が発生した場合、何もしていないように見える場合があります。

404 ページにリダイレクトするのは良くありませんが、そこからのコンテンツを問題なく含めることができます。そうすれば、正しい URL から適切に 404 ステータスを送信するページを作成できますが、「何を探しているのですか?」というメッセージも表示されます。人間の読者のためのページ。

于 2009-09-04T19:50:55.313 に答える
-1

Drupal や Wordpress の CMS (およびおそらく他のもの) で、カスタム php コードを存在しないように見せようとしている場合 (何らかの条件が満たされない限り)、CMS の 404 ハンドラーに引き継がせることで、次のようにうまく機能します。

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>
于 2019-01-28T19:38:13.317 に答える
-4

これを一度試してください。

$wp_query->set_404();
status_header(404);
get_template_part('404'); 
于 2020-03-31T04:24:10.667 に答える