在 htaccess 上使用 header() 找不到 404

发布于 2024-12-03 16:45:08 字数 631 浏览 1 评论 0原文

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

ErrorDocument 404 /error404.php

我的 error404 执行 require("checkdb.php"); 它检查文件名是否在 MySQL 数据库中表示。如果是的话我想返回200 OK并吐出内容。 如果没有,我想吐出 404

我的问题是我被 404 困住了。虽然我的页面正确显示,但搜索引擎不会拾取它,并且 google+ 无法工作(如果它检查)页面得到 404。

header('HTTP/1.1 200 OK'); 

在检查数据库后立即添加了(尚未显示 html 代码),但我得到了

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

发送

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

我该怎么做才能正确解决这个问题? 预先非常感谢!

Some of web pages are actually contained in my database.
I have the htaccess with the following

ErrorDocument 404 /error404.php

My error404 do a require("checkdb.php");
which check if the filename is represented in MySQL db. If so, I want to return 200 OK and spit out the content.
If not, I want to spit out that 404

My problem is I'm stuck with 404. While my page is properly displayed, it won't get picked up by search engine and the google+ doesn't work has it does a check for the page and it gets 404.

I've added

header('HTTP/1.1 200 OK'); 

right after a check in the database (no html code has been displayed yet), but I get the

Warning. Cannot modify header information - headers already sent by ....

Even if I move that header() right at the beginning of /error404.php I still get that error. It sounds like Apache will return that 404 first and then call /error404.php

What can I do to properly fix this?
Thanks very much in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感性 2024-12-10 16:45:08

当 Apache 发送由 ErrorDocument 指定的文档时,它不会将其作为常规页面提供服务,并且已经发送了 404 标头。您应该使用 PHP 脚本首先检查文档是否存在,而不是在 Apache 中使用 ErrorDocument 指令,如果存在,则显示它。如果不存在,则 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 指令。

When Apache sends the document specified by ErrorDocument, it is not serving it as a regular page, and has already sent the 404 headers. Instead of using the ErrorDocument directive in Apache, you should instead use your PHP script to check first if the document exists, and if it does, display it. If it does not exist, then PHP sends the 404 error header itself.

The following does not take place in error404.php, but rather in a normal script like 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();

And remove the ErrorDocument directive from your Apache configuration.

所谓喜欢 2024-12-10 16:45:08

标题行需要位于任何输出之前。如果没有一些代码,我们就无法指出输出来自哪里。

The header line needs to be before any output. Without some code, there is no way we can point out where the output is coming from.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文