PHP标头(“ Location:/404.php”,true,404)不起作用

| 我想使用以下内容将数据库中不再存在的页面重定向到自定义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文件中带有\'ErrorDocument 404 /404.php \',但这也只显示一个空白页。 如果我这样做:
if ( !$found ):
  header( \"HTTP/1.1 404 Not Found\" );
  header( \"Location: /404.php\" );
  exit();
endif;
它确实重定向,但带有302标头。 任何帮助将不胜感激。     
已邀请:
也许没有重定向?
if ( !$found ):
   include(\'../404.php\');
   exit();
endif;
    
我知道这是一个老问题,但我发现它很方便: PHP将状态标头设置为404并添加刷新以更正正确的页面,例如2秒后。
header(\'HTTP/1.1 404 Not Found\');
header(\"Refresh:0; url=search.php\");
然后,您会看到404页显示几秒钟,然后重定向到fx搜索页。 在我的情况下,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: 如果您要重定向,则应显示错误页面并为新网址设置ѭ6     
我已经尝试并确保检查error_log文件的正确方法是发送404标头,然后将错误页面包括到下一行。
<?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();
}
    

要回复问题请先登录注册