在 htaccess 上使用 header() 找不到 404
一些网页实际上包含在我的数据库中。 我的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当 Apache 发送由
ErrorDocument
指定的文档时,它不会将其作为常规页面提供服务,并且已经发送了 404 标头。您应该使用 PHP 脚本首先检查文档是否存在,而不是在 Apache 中使用ErrorDocument
指令,如果存在,则显示它。如果不存在,则 PHP 本身发送 404 错误标头。以下内容不会发生在 error404.php 中,而是发生在像 index.php 这样的普通脚本中:
并从 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 theErrorDocument
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:
And remove the
ErrorDocument
directive from your Apache configuration.标题行需要位于任何输出之前。如果没有一些代码,我们就无法指出输出来自哪里。
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.