在 PHP 中,实现页面跳转(Redirect)常见有 3 种方式。下面我按使用频率 + 实际场景给你讲清楚,每种都附 可直接用的代码示例 👇


一、方式一:header() 跳转(最常用 ✅)

示例代码

<?php
header("Location: https://www.example.com");
exit;

带状态码(推荐)

header("Location: /login.php", true, 302);
exit;

常见状态码

状态码含义
302临时跳转(默认)
301永久跳转(SEO 用)
303POST 后跳转
header("Location: /success.php", true, 303);
exit;

注意事项(非常重要)

❗ 必须在 任何输出之前
❗ 一定要 exit
❗ 不适用于已经输出 HTML 的情况


二、方式二:JavaScript 跳转(前端跳转)

示例代码

<?php
echo "<script>window.location.href='https://www.example.com';</script>";

延时跳转

echo "<script>
    setTimeout(function(){
        location.href = 'success.php';
    }, 3000);
</script>";

适用场景

  • 已经输出页面
  • 需要提示后跳转
  • 用户可见的交互跳转

三、方式三:HTML Meta Refresh 跳转

示例代码

<?php
echo '<meta http-equiv="refresh" content="0;url=success.php">';

延时跳转

echo '<meta http-equiv="refresh" content="5;url=success.php">';
echo '5 秒后跳转...';

特点

优点缺点
简单SEO 不友好
可延时用户体验一般
不受 header 限制依赖浏览器

四、三种方式对比(速查表)

方式是否推荐适合场景
header()⭐⭐⭐⭐⭐后端逻辑跳转
JavaScript⭐⭐⭐⭐已输出页面
Meta Refresh⭐⭐兜底方案

五、常见错误(新人最容易踩)

❌ 错误 1:header 前有输出

echo "hello";
header("Location: /index.php"); // 无效

❌ 错误 2:忘记 exit

header("Location: /index.php");
// 后面的代码还会执行!


六、实战示例:登录判断跳转

if (!isset($_SESSION['user'])) {
    header("Location: login.php");
    exit;
}

echo "欢迎登录";


七、一句话总结

能用 header() 就用 header();已经输出了内容,再用 JS 或 Meta