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
相关产品推荐
相关产品推荐

