header()是PHP页面跳转最直接有效的方式,通过发送HTTP Location响应头实现服务端重定向,需在任何输出前调用并建议exit终止脚本。
header() 是 PHP 页面跳转最直接有效的方式
PHP 中实现页面跳转,
函数是标准且推荐的做法。它通过发送 HTTP
响应头触发
浏览器
重定向,速度快、无客户端依赖、不依赖 JavaScript。
关键前提是:必须在任何输出(包括空格、换行、
)之前调用,否则会报错
。
确保脚本开头没有空格或 BOM 字符(尤其 Windows 编辑器保存时容易带 BOM)
避免在
前使用
、
、
或 HTML 内容
调用后建议紧跟
或
,防止后续代码继续执行
为什么不能用 echo zuojiankuohao
php
cnscript>
win
dow.location...
用
输出 JavaScript 跳转属于客户端跳转,本质是让浏览器执行脚本,不是真正的 HTTP 重定向。它在以下场景不可靠:
用户禁用 JavaScript 时完全失效
搜索引擎爬虫通常不执行 JS,SEO 友好性差
无法正确传递 HTTP 状态码(如 301/302),影响缓存与重定向语义
页面已部分渲染后再执行跳转,可能造成白屏或闪烁
仅当服务端跳转不可用(例如已输出内容且无法修改结构)时才作为兜底方案,且需加
防止重复响应:
立即学习
“
PHP免费学习笔记(深入)
”;
SEO GPT
免费的白帽SEO,PPC和网站经销商平台
下载
301 和 302 状态码要手动指定吗?
默认发送的是 302(临时重定向)。如果需要永久重定向(如 SEO 迁移旧 URL),必须显式设置状态码:
+
(顺序不能反)
注意:
单独调用不会自动加
头,必须配合
使用。漏掉状态码会导致搜索引擎误判为临时跳转。
header() 跳转后 $_POST / $_GET 数据会丢失吗?
会丢失。HTTP 重定向本质是浏览器发起一次**全新请求**,原请求的
、
全部清空,只有
参数可通过拼接 URL 保留:
跳转到带参数的 URL:
敏感数据(如密码、token)切勿拼在 URL 中,应改用
临时存储
表单提交后跳转(Post-Redirect-Get 模式)正是为了防止刷新重复提交,此时原本的 POST 数据本就不该被保留
如果强行想“保持 POST”,只能用 JavaScript 表单自动提交或 AJAX,但这已脱离纯 PHP 跳转范畴,且破坏 REST 语义。
header()LocationWarning: Cannot modify header information - headers already sentheader()echoprintvar_dumpexitdieheader('Location: https://example.com/login.php');
exit;echoexitecho '';
exit;header('Location: ...')header('Location: https://example.com/new-page', true, 301);header('HTTP/1.1 301 Moved Permanently');header('Location: ...')http_response_code(301)Locationheader('Location: ...')$_POST$_FILES$_GETheader('Location: success.php?status=ok&id=' . urlencode($id));$_SESSION