php 7.4 原生重定向需用 header() 函数,前提为无任何输出且调用后 exit;失败主因是“headers already sent”,须避免 bom、空格、提前输出;推荐绝对路径 location 头配 302/303 状态码;已有输出时可用 javascript 或 refresh 头降级处理。

PHP 7.4 原生环境下实现重定向,核心就是用好 header() 函数,但必须守住两个硬性条件:不能有任何输出、调用后必须终止脚本。只要踩准这点,不依赖框架也能做到干净、可靠、跨浏览器兼容。
确保 header() 能正常执行的关键检查
重定向失败绝大多数是因为“Headers already sent”错误。这不是 PHP 的 bug,而是 HTTP 协议规则——响应头必须在响应体之前发送。常见干扰源包括:
- PHP 文件开头或结尾存在 UTF-8 BOM 字节(用编辑器保存为“UTF-8 无 BOM”格式)
<?php前有空格、换行,或?>后有多余字符(建议省略?>结尾)- 重定向前执行了
echo、print_r、var_dump或输出了 PHP Notice/Warning(开发时设display_errors = Off) - 引入的配置文件(如
config.php)里悄悄输出了空行或空格
标准重定向写法(推荐用于登录、表单提交等场景)
这是最常用也最安全的方式,适用于跳转逻辑明确、无需用户等待的场景:
- 使用绝对路径(以
/开头),避免因当前 URL 深度不同导致跳转错乱,例如:header('Location: /dashboard.php'); - 显式指定 302 状态码(临时重定向,默认行为),或根据需要改用 301(永久)、303(POST 后跳转防重复提交):
http_response_code(303); header('Location: /success.php'); -
必须紧跟
exit或die,防止后续代码意外执行(比如敏感操作或重复插入)
已有输出时的备用方案:JavaScript 跳转
当页面已输出 HTML(比如先显示“操作成功”,再跳转),header() 已不可用。此时可退而求其次,用客户端跳转:
- 输出一段标准 JavaScript:
<script>window.location.href = "/thank-you.php";</script> - 为兼顾低版本浏览器和 SEO 友好性,可额外加一个手动跳转链接:
<p>如果未自动跳转,请@#@#@#@#@#@#@#@#@#@0</p> - 注意:这种方式依赖浏览器执行 JS,无法替代服务端重定向的安全语义(如防止重复提交)
带提示的延迟跳转(适合操作反馈场景)
想让用户看到“保存成功!3 秒后返回列表页”,又不想用 JS?可以用 Refresh 头:
-
header('Refresh: 3; url=/list.php');—— 浏览器会在 3 秒后跳转,且允许你在header()后输出提示文字 - 它比纯 JS 更轻量,也不受 JS 禁用影响;但不如
Location语义清晰,搜索引擎可能不视作规范重定向 - 务必控制好时间,一般 2–5 秒较合理;关键业务仍建议用
Location+ 成功页展示
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











