0

一些网页实际上包含在我的数据库中。我有以下的htaccess

ErrorDocument 404 /error404.php

我的 error404 会require("checkdb.php"); 检查文件名是否在 MySQL db 中表示。如果是这样,我想返回 200 OK 并吐出内容。如果不是,我想吐出那个404

我的问题是我被 404 卡住了。虽然我的页面正确显示,但它不会被搜索引擎拾取,并且 google+ 不起作用,它会检查页面并得到 404。

我已经添加

header('HTTP/1.1 200 OK'); 

在检查数据库之后(还没有显示 html 代码),但我得到了

警告。无法修改标头信息 - 标头已由 .... 发送

即使我header()在开始时将其移动,/error404.php 我仍然会收到该错误。听起来 Apache 会先返回 404 然后调用/error404.php

我该怎么做才能正确解决这个问题?首先十分感谢!

4

2 回答 2

1

当 Apache 发送由 指定的文档时ErrorDocument,它没有将其作为常规页面提供,并且已经发送了 404 标头。与其ErrorDocument在 Apache 中使用该指令,不如使用 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();

ErrorDocument并从您的 Apache 配置中删除该指令。

于 2011-09-10T20:24:04.403 回答
0

标题行需要在任何输出之前。如果没有一些代码,我们就无法指出输出的来源。

于 2011-09-10T20:19:52.187 回答