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

PHP重定向异常:执行时先加载当前页再跳转至目标页面

解决「重定向前先加载当前页面」的问题

你的代码之所以会先加载当前页面再跳转,核心问题出在 ob_end_flush() 这个函数上——它会把输出缓冲区里捕获的所有内容(也就是当前页面的内容)发送给浏览器。这样一来,浏览器先收到当前页面的内容并渲染出来,之后才会处理重定向头,导致你看到的「先加载当前页再跳转」的现象。

下面给你两种可行的修复方案:

方案一:丢弃输出缓冲区内容而非发送

把 ob_end_flush() 换成 ob_end_clean(),这个函数会直接丢弃缓冲区里的内容,不会把当前页面的内容发给浏览器,确保只有重定向头被发送:

function util_redirect ($page) { 
    ob_start(); 
    header("Location: " . $page, true); 
    ob_end_clean(); // 丢弃缓冲区内容,不发送给浏览器
    die(); 
}

方案二:移除不必要的输出缓冲(推荐,若条件允许)

如果你能保证在调用 util_redirect() 之前没有任何输出(比如没有 echo/print 语句、PHP 标签外没有 HTML 或空白字符、<?php 开头前没有多余的换行或空格),那完全可以去掉输出缓冲的代码,这样更简洁:

function util_redirect ($page) { 
    // 可选:明确指定HTTP状态码(302是临时重定向,301是永久重定向,根据需求选择)
    header("Location: " . $page, true, 302); 
    exit(); // 立即终止脚本执行,避免后续代码运行
}

重要提示:

  • 调用重定向函数前绝对不能有任何输出,哪怕是一个空格或者换行符,都会导致「headers already sent」错误。
  • 发送重定向头后一定要用 exit() 或 die() 终止脚本,防止后续代码继续执行产生意外输出。
  • 明确指定HTTP状态码是SEO和浏览器行为规范的最佳实践,临时跳转用302,永久跳转用301。

内容的提问来源于stack exchange,提问作者user3855851

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:17