在 Web 开发中,网页重定向是一种常见的操作,例如用户登录后跳转到个人中心页,或者旧页面迁移到新地址。PHP 提供了简单而直接的方式来实现这一功能,即使用 header() 函数发送 HTTP 头信息,从而通知浏览器跳转到新的页面。
PHP 的 header() 函数可以用来发送原始的 HTTP 报文头部信息,其语法如下:
<span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$header</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$replace</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$response_code</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>);
</span></span>
用于重定向时,常见的形式如下:
<span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: https://www.example.com'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
</span></span>
这里 Location 是一个特殊的 HTTP 头,用于指示浏览器跳转到另一个 URL。调用 exit 是为了确保 PHP 不继续执行后续代码,防止意外输出或逻辑错误。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$login_success</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: /dashboard.php'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"用户名或密码错误。"</span></span><span>;
}
</span></span>
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REQUEST_METHOD'</span></span><span>] === </span><span><span class="hljs-string">'POST'</span></span><span>) {
</span><span><span class="hljs-comment">// 处理表单</span></span><span>
</span><span><span class="hljs-comment">// ...</span></span><span>
</span><span><span class="hljs-comment">// 重定向到感谢页面</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: /thank-you.php'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
表单提交后使用 header() 进行跳转,可以有效防止刷新页面时重复提交数据:
<span><span><span class="hljs-comment">// 保存数据后跳转</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: /success.php'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
</span></span>
header 必须在任何输出前调用
一旦页面有输出(如 echo、HTML 标签或空格),再使用 header() 将会报错:“Cannot modify header information”。可以通过 ob_start() 开启输出缓冲区来避免这一问题。
使用绝对路径更安全
虽然可以使用相对路径,如 Location: dashboard.php,但推荐使用绝对路径或完整 URL,以避免路径错误。
结合 HTTP 状态码使用
可通过 header() 的第三个参数设置 HTTP 状态码,例如:
<span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: /new-page.php'</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>, </span><span><span class="hljs-number">301</span></span><span>); </span><span><span class="hljs-comment">// 永久重定向</span></span><span>
</span></span>
状态码含义如下:
301:永久重定向
302:临时重定向(默认)
303:推荐用于表单提交后的跳转
使用 header('Location: ...') 是 PHP 实现网页跳转最直接有效的方法,掌握它可以让你轻松处理页面导航、状态转移和用户体验的优化。在实际项目中,配合合适的业务逻辑与 HTTP 状态码,可以实现更符合 Web 标准的重定向策略。