【问题标题】: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 结构中发送标头。
另外不要忘记在发送标头之前确保您没有向客户端发送任何输出。