web-dev-qa-db-ja.com

PHPでエラー404を作成するにはどうすればよいですか?

私の.htaccessは/Word_hereへのすべてのリクエストを/page.php?name=Word_hereにリダイレクトします。 PHPスクリプトは、要求されたページがページの配列にあるかどうかを確認します。

そうでない場合、どのようにエラー404をシミュレートできますか?これを試しましたが、.htaccessErrorDocumentで設定された404ページが表示されませんでした。

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

エラー404ページにリダイレクトするのは間違っていると思いますか?

90
Eric

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()は必ずしも必要ではありませんが、通常の実行を継続しないようにします。

116
blade

あなたがしていることは機能し、ブラウザは404コードを受け取ります。それがwontすることは、あなたが期待するかもしれない "not found"ページを表示することです、例えば:

見つかりません

要求された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
80
JW.

これを試して:

<?php
header("HTTP/1.0 404 Not Found");
?>
22
Ates Goral

。htaccessファイルを使用してカスタムエラーページを作成

1。404-ページが見つかりません

 RewriteEngine On
 ErrorDocument 404 /404.html

2。500-内部サーバーエラー

RewriteEngine On
ErrorDocument 500 /500.html

。403-禁止

RewriteEngine On
ErrorDocument 403 /403.html

4。400-不正なリクエスト

RewriteEngine On
ErrorDocument 400 /400.html

5。401-承認が必要

RewriteEngine On
ErrorDocument 401 /401.html

すべてのエラーを単一ページにリダイレクトすることもできます。like

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html
10
Irshad Khan

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

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

3
Eli

入れてみて

ErrorDocument 404 /(root directory)/(error file) 

.htaccessファイル内。

エラーに対してこれを行いますが、エラーの代わりに404を使用します。

0

DrupalまたはWordpress CMS(およびその他の可能性が高い)で、一部のカスタムphpコードが存在しないようにしようとする場合(一部の条件が満たされない限り)、次のように動作しますCMSの404ハンドラーを引き継ぐことにより:

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>
0
Mike Godin