【问题标题】:php 404 status handling on mvc [duplicate]mvc上的php 404状态处理[重复]
【发布时间】:2026-01-06 17:00:01
【问题描述】:

可能重复:
“Warning: Headers already sent” in PHP

您好,对于不在我网站中的网页,我无法获得 404 状态代码。我的 .htaccess 看起来像这样:

重写引擎开启

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l

重写规则 ^(.+)$ index.php?url=$1 [QSA,L]

所以我所有的页面都从那里转到 index.php,它们转到引导程序,然后发送到错误控制器。在错误视图中是 make a:

header("HTTP/1.1 404 未找到");

但它给了我一个错误“无法修改标头信息 - 标头已发送”。现在,如果我删除此行,我会得到 200 Ok 状态。我认为这是因为我将所有内容都发送到 index.php 并且该状态是 200 Ok。那么如何从 .htaccess 中改变这些文件呢?或者你有其他方法来解决这个问题吗? 谢谢

【问题讨论】:

    标签: apache .htaccess http-headers php


    【解决方案1】:

    除了 foozy 的回答之外,请在打开 <?php 标记之前检查您的 PHP 代码中是否存在任何空格(空格、制表符、换行符等)。如果你发现了,请删除它。

    如果有空格,会导致“Cannot modify header information”错误。

    另一种有用的调试方法是将exit('stopped'); 放在header("HTTP/1.1 404 Not Found"); 之前。当您刷新页面并查看源代码时,理想情况下,您应该看到stopped 作为打印的第一件事(前面没有空格)。如果存在间距,那就有问题了。

    【讨论】:

    • 谢谢,这真的帮助了我:我在
    • 很高兴听到问题已得到解决。 =)
    【解决方案2】:

    可能您在错误的位置发送 HTTP 标头。

    如果您使用的是 MVC PHP 框架,则需要阅读框架的文档以完全了解调度、路由和请求处理过程。答案取决于框架。必须有关于处理请求和发送标头的信息。

    如果没有,那么 index.php 和 bootstrap 文件是你自己的,你需要尝试在 bootstrap 文件或控制器级别(错误控制器?)而不是视图文件中发送 404 标头。视图层不适合在 MVC 结构中发送标头。

    另外不要忘记在发送标头之前确保您没有向客户端发送任何输出。

    【讨论】:

    • 我尝试将 index.php 放入 bootstrap 或 errorController 但没有好的结果。在本教程系列youtube.com/watch?v=Aw28-krO7ZM 之后,我制作了我的 mvc。我已经在那里发布了一个问题,但现在回答了。