设置Status Header无效且显示空白页:CodeIgniter3.1.8+PHP7.1问题
在CodeIgniter 3.1.8 + PHP 7.1中解决set_status_header(404)不生效/页面空白的问题
嘿,我来帮你搞定这个问题!看了你的代码,核心问题其实出在最后那行redirect(base_url(),'refresh')上,咱们一步步拆解:
为什么你的404状态码不生效/页面空白?
- 当你调用
redirect()时,CodeIgniter会自动发送302 Found的跳转状态头,这会直接覆盖你之前用set_status_header('404')设置的404状态码,所以浏览器根本不会接收到404的状态。 - 如果注释掉redirect但没打开
$this->load->view('oops'),页面就没有任何内容输出,自然会显示空白;如果同时保留redirect,浏览器会直接跳转到首页,你根本看不到404相关的内容。
正确的解决方案
根据你的需求,分两种情况处理:
情况1:显示自定义404错误页面(推荐,符合HTTP规范)
如果你想让用户看到404错误页,直接去掉redirect,加载你的视图即可:
public function oops() { // 这里传数字404更规范,避免字符串解析问题 $this->output->set_status_header(404); // 加载你的自定义404视图,确保视图文件存在且有内容 $this->load->view('oops'); }
这样设置后,浏览器会接收到404状态码,同时显示你自定义的错误页面,不会出现空白或状态码不生效的问题。
情况2:特殊需求下要跳转且保留404状态(不推荐)
从HTTP规范来说,404表示资源不存在,不应该跳转,但如果你有特殊业务需求,可以手动发送头后再跳转:
public function oops() { // 先手动发送404头,确保在任何输出之前调用 header("HTTP/1.1 404 Not Found"); // 再执行跳转 redirect(base_url(), 'refresh'); }
⚠️ 注意:这种方式不符合HTTP语义,搜索引擎爬虫可能会混淆,用户体验也不好,除非必要不建议使用。
额外小提示
- 确保你的
oops.php视图文件确实存在于application/views目录下,并且里面有HTML内容,不然加载视图后还是会空白。 - CodeIgniter的
set_status_header()方法优先接受数字类型的状态码,比如404而非'404',能避免潜在的解析错误。
内容的提问来源于stack exchange,提问作者Sajan Saj
相关产品推荐
相关产品推荐

