似乎无法将404和Location标头一起发送

Jaz*_*zzy 4 php header http-headers http-status-code-404

我试图在数据库结果为空(这是产品页面)时发送两者.

我现在使用的代码,有效:

    header("Status: 404 Not Found");
    include_once("404.html");
    exit;
Run Code Online (Sandbox Code Playgroud)

我最初尝试过的代码不起作用:

    header("Status: 404 Not Found");
    header("Location: 404.html");
    exit;
Run Code Online (Sandbox Code Playgroud)

使用后面的代码,我可以使用其中之一,但不能同时使用两者.换句话说,我可以发送404标头并看到它显示在Wireshark中,或者我可以发送Location标头并重定向,但是如果我尝试发送两者,则只会发送404并且Location头也不会重定向.

我已经用可行的解决方案解决了问题,但我想知道为什么会这样.

带有FastCGI的Linux上的PHP 5.2.

谢谢.

tim*_*dev 5

你不能发送它们,因为它们是互斥的.

根据header()文档:

第二个特例是"Location:"标题.它不仅将此标头发送回浏览器,而且还向浏览器返回REDIRECT(302)状态代码,除非已设置201或3xx状态代码.

因此发送两者都是无稽之谈.您要对浏览器说"该文档不存在.此外,文档已移至以下位置".那些是矛盾的.

您找到的解决方案不是"解决方法" - 这是正确的方法