有些网页实际上包含在我的数据库中。 我有以下
的htaccessErrorDocument 404 /error404.php
我的错误404执行了require("checkdb.php");
检查文件名是否在MySQL db中表示。如果是这样,我想返回200 OK并吐出内容。
如果没有,我想吐出那个404
我的问题是我遇到了404.虽然我的页面显示得很好,但搜索引擎无法获取它,而且谷歌+不起作用,如果它检查页面,它会得到404。
我添加了
header('HTTP/1.1 200 OK');
在检查数据库后(没有显示html代码),但我得到了
警告。无法修改标题信息 - 已经由....发送的标题
即使我在header()
的开头移动了/error404.php
,我仍然会遇到错误。听起来Apache会首先返回404,然后调用/error404.php
我该怎么做才能正确解决这个问题? 非常感谢提前!
答案 0 :(得分:1)
当Apache发送ErrorDocument
指定的文档时,它不会将其作为常规页面提供,并且已经发送了404标头。除了在Apache中使用ErrorDocument
指令之外,您应该使用PHP脚本首先检查文档是否存在,如果存在,则显示它。如果它不存在,那么PHP会自己发送404错误标题。
以下内容不会发生在error404.php中,而是发生在像index.php这样的普通脚本中:
// Do whatever you're doing to check
require("checkdb.php");
// If the check fails, PHP sends the 404:
header("HTTP/1.0 404 Not Found");
// Then display your custom error document with PHP
// You can display the other contents of error404.php
echo "Oops, page wasn't found!";
exit();
从Apache配置中删除ErrorDocument
指令。
答案 1 :(得分:0)
标题行必须在任何输出之前。如果没有一些代码,我们就无法指出输出的来源。