您好,我无法获取不在我网站中的网页的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中获取这些文件的差异呢?或者你有另一种方法来处理这个问题? 感谢
答案 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
作为打印的第一件事(前面没有间距)。如果存在间距,则存在问题。