You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:31:59