Php HTTP-404头不';在服务器日志中似乎不起作用

Php HTTP-404头不';在服务器日志中似乎不起作用,php,http-headers,http-status-code-404,Php,Http Headers,Http Status Code 404,我已经建立了一个动态网站,修改了静态URL的.htaccess文件,我需要为SEO创建一个404页面 header("HTTP/1.0 404 Not Found"); 当数据库中没有匹配的链接时,我使用上面的PHPheader()函数,但当我检查服务器日志时,它似乎不起作用,并给出http200 OK状态代码 以下是服务器日志中的行: [My IP] - - [12/Jun/2011:01:47:38 +0300] "GET /4k.html HTTP/1.1" 200 3284 "-" "

我已经建立了一个动态网站,修改了静态URL的.htaccess文件,我需要为SEO创建一个404页面

header("HTTP/1.0 404 Not Found");
当数据库中没有匹配的链接时,我使用上面的PHP
header()
函数,但当我检查服务器日志时,它似乎不起作用,并给出
http200 OK
状态代码

以下是服务器日志中的行:

[My IP] - - [12/Jun/2011:01:47:38 +0300] "GET /4k.html HTTP/1.1" 200 3284 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91 Safari/534.30" 
4k.html
是不存在的链接


我遗漏了什么吗?

据我所知,您正在将所有文件重写为一个PHP文件,以便PHP能够读取该文件并执行为页面服务所需的操作。这意味着Apache对404页面的处理本质上将被覆盖。此时,由您的PHP文件来提供页面或显示404。据Apache所知,该请求产生了200的HTTP代码,因为在触发PHP解析脚本并将输出提供给请求它的客户机之后,它不起任何作用


在PHP脚本中,您将检查页面是否存在。如果该页面存在,则显示该页面,否则,给出404消息。通过放置
标题(“HTTP/1.0 404未找到”,true)
在您的PHP文件中,当您知道它是404时,它会将404头发送到客户端,因此操作是正确的。要验证发送是否正确,请触发404(通过输入虚假url)并在Chrome Developer tools中查看请求详细信息,您应该在响应标题下看到发送的是404,而Apache日志显示的是200

如何为404PHP脚本提供服务?可能是Apache认为您的方法很好,并记录了一个200,即使您的PHP脚本返回404。我正在检查页面顶部的数据库中是否存在链接,如果不存在,我在常规内容页面中使用http 404脚本,除了title之外,我不更改任何meta或head标记,这是正常情况吗?Apache无法检查数据库。。此时您已经在执行一个PHP脚本。您如何/在哪里调用该PHP脚本?@Onur您可以尝试
标题(“HTTP/1.0 404未找到”,true)甚至
标题(“状态:404未找到”)如果您在Apache下使用FastCGI,您确定在标头之前没有向客户端输出任何数据吗?一旦任何输出被发送回客户端,标题将被忽略。在开发者工具中,它似乎也是200,它是书面请求URL/4k.html,请求方法:GET,状态代码:200好的。我还调用了404页面中的一些js和css文件,它会影响结果吗?不,它不会影响结果。每个新资产(js、css文档、图像等)都是它自己的独立请求。验证您正在查看面向web的文档:它应该是404,而不是200。接下来,尝试将该头代码段放在PHP文件的顶部,看看是否可以触发404。编辑:没有看到您最近的评论-请尝试删除该header()函数的第二个参数。我将header脚本放在页面的第一行,服务器仍然显示“警告:无法修改header信息-header已由发送(输出开始于…”我想这是由服务器引起的。最后我让它工作了。我禁用了Unicode签名(BOM),它工作了,不知道这是干什么用的……:)啊,那就行了。BOM表称为字节顺序标记,文本编辑器会将其放入文件中。在这种情况下是没有用的。头通过HTTP响应的前几行发送,通过将该BOM表放在那里,可以防止PHP发送更多的头。