以下を使用して、データベースに存在しなくなったページをカスタム404ページにリダイレクトしたいと思います。
ob_start();
....
if ( !$found ):
header( "Location: /404.php", true, 404 );
exit();
endif;
ただし、これは実際にはリダイレクトせず、空のページを表示するだけです(ブラウザへの出力の前にexit()が呼び出されるため)。
私も次のことを試しました:
if ( !$found ):
header( "HTTP/1.1 404 Not Found" );
exit();
endif;
.htaccessファイルに「ErrorDocument404/404.php」が含まれていますが、これも空のページを示しています。
そして私がこれを行う場合:
if ( !$found ):
header( "HTTP/1.1 404 Not Found" );
header( "Location: /404.php" );
exit();
endif;
リダイレクトしますが、302ヘッダーを使用します。
どんな助けでも大歓迎です。
私はそれが古い問題であることを知っていますが、私はそれが便利だと思っただけです:
phpはステータスヘッダーを404に設定し、2秒後のように正しいページに更新を追加します。
header('HTTP/1.1 404 Not Found');
header("Refresh:0; url=search.php");
次に、fx検索ページにリダイレクトする数秒前に404ページが表示されます。
私の場合、Symfony2、例外リスナー:
$request = $event->getRequest();
$hostname = $request->getSchemeAndHttpHost();
$response->setStatusCode(404);
$response->setContent('<html>404, page not found</html>');
$response->headers->set('Refresh', '2;url='.$hostname.'/#!/404');
非常に短い時間を希望する場合、時間(2)は0.2にすることができます。
場所を持つヘッダー404を持つことはできません:
リダイレクトする場合は、エラーページを表示し、新しいURLでmeta refresh
を設定する必要があります
404ヘッダーを送信してから、エラーページを次の行に含めるという正しい方法であるerror_logファイルを確認してみました。
<?php
header('HTTP/1.1 404 Not Found');
include 'search.php'; // or 404.php whatever you want...
exit();
?>
最後に、テキストベースのブラウザにはexit()を使用する必要があります。
問題は、開始している出力バッファリング、または404でリダイレクトできないことが原因だと思います。最初のコード例は、出力バッファをクリーンアップして出力バッファリングを停止する代わりに、出力バッファを開始して終了することを示しています。
最初の例を次のように変更します。
if (!$found) {
ob_end_clean();
header('Location: /404.php');
exit();
}