【问题标题】:Soft 404 error: PHP not sending 404 header软 404 错误:PHP 未发送 404 标头
【发布时间】:2018-04-29 00:01:31
【问题描述】:

当在数据库中找不到页面时,我有一个 php 脚本,我发送 http 标头 404 not found,而不是 php 发送 HTTP 200。Google 网站管理员工具显示其软 404 错误。

<?php 
if (mysql_num_rows($rs_press) == 0) {

    header("HTTP/1.1 404 Not Found");
    include('404.shtml');
    exit;

}
?>

并且 GMT 页面的 HTTP 响应显示 HTTP 200 OK 很奇怪。为什么 PHP 发送 200 而不是 404 错误,因为这很奇怪?

if 代码工作正常,但只有 404 标头未发送。这是页面的输出..

我该如何解决? 我在专用服务器上运行 PHP 5.6/Apache,Smarty 已激活 SSL

【问题讨论】:

  • 你访问 if 子句吗?

标签: php apache http-status-code-404


【解决方案1】:

PHP header() function 实际上需要 3 个参数:

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

尝试将您的代码更改为:

<?php 
if (mysql_num_rows($rs_press) == 0) {

    header("HTTP/1.1 404 Not Found", true, 404);
    include('404.shtml');
    exit;

}
?>

或者,您可以尝试使用http_response_code() 函数。

【讨论】:

  • 谢谢,我试过了,http_response_code() 及以上都不起作用。如果我取出 include(404.shml) 页面是空白的。
  • @pbu 我刚刚在本地服务器上测试了与上面相同的 header() 调用,它确实返回了 404 标头。当您删除包含时,它会给您一个 404 标头吗?
  • 当我删除包含时它显示白色空白页。可能标头是以前发送的..
  • @pbu 是的,但是在 HTTP 标头中,删除包含时是否返回 404?
  • 我不确定到底是什么问题。它在 https 上的行为不应该有任何不同。我会检查你的 apache 日志和你的 php 日志,看看它是否给出了任何错误或警告消息。如果您在日志中看到有趣的内容,可以将其添加到您的问题中,我会尽力帮助解决问题。
猜你喜欢
  • 2010-11-17
  • 2013-04-21
  • 2013-03-28
  • 2015-07-22
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
相关资源
最近更新 更多