在mvc中的php 404状态处理

时间:2012-11-04 21:40:38

标签: apache .htaccess http-headers php

  

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

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

  

RewriteEngine On

     

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

     

RewriteRule ^(。+)$ index.php?url = $ 1 [QSA,L]

所以我的所有页面都从index.php转到bootstrap,然后发送到错误控制器。在错误视图中创建:

  

标题(“HTTP / 1.1 404 Not Found”);

但它给我一个错误,“无法修改标题信息 - 已经发送的标题”。现在,如果删除此行,我会获得200 Ok状态。我想这是因为我将所有内容发送到index.php并且状态为200 Ok。那么如何从.htaccess中获取这些文件的差异呢?或者你有另一种方法来处理这个问题? 感谢

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

除了foozy的答案之外,在打开<?php标记之前,请检查PHP代码中是否有空格(空格,制表符,换行符等)。如果您找到,请将其删除。

如果有任何空格,这将导致“无法修改标题信息”错误。

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