PHP 實現頁面跳轉主要有三種方法:header() 函數、HTML Meta 標籤、JavaScript 腳本。本文提供各方法的標準語法、適用場景、優缺點比較與安全建議。
<?php
// 基本語法
header('Location: https://www.example.com');
exit; // 必須加上 exit 防止後續程式碼執行
// 帶參數跳轉
$id = 123;
$action = 'view';
header('Location: https://www.example.com/page.php?id=' . urlencode($id) . '&action=' . urlencode($action));
exit;?>
exit 或 die()header('Location: ...', true, 301)<?php
$url = 'https://www.example.com';
$delay = 3; // 秒
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="<?= $delay ?>;url=<?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?>">
<title>跳轉中...</title>
</head>
<body>
<p><?= $delay ?> 秒後自動跳轉至 <a href="<?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?>">目標頁面</a></p>
</body>
</html>
header()<?php
$url = 'https://www.example.com';
?>
<script>
// 立即跳轉(取代歷史記錄,避免「上一頁」問題)
window.location.replace('<?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?>');
// 延遲跳轉
// setTimeout(() => window.location.href = '...', 3000);
</script>
<noscript>
<meta http-equiv="refresh" content="0;url=<?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?>">
</noscript>
<?php
// 目標頁面接收參數
$id = $_GET['id'] ?? 0;
$action = $_GET['action'] ?? '';
// 業務邏輯...?>
| 特性 | header() | Meta Refresh | JavaScript |
|---|---|---|---|
| 執行端 | 伺服器 | 客戶端 | 客戶端 |
| HTTP 狀態碼 | 301/302/303/307/308 | 200 | 200 |
| SEO 傳遞權重 | 是 (301/308) | 否 | 否 |
| 支援延遲 | 否 | 是 | 是 |
| 需在輸出前 | 是 | 否 | 否 |
| 歷史記錄控制 | 瀏覽器決定 | 保留中介頁 | replace() 可移除 |
| 適用場景 | 表單後、登入、API、SEO 遷移 | 維護頁、倒數、靜態頁 | AJAX、條件判斷、SPA、動態參數 |
header() + exit,符合 HTTP 標準、SEO 友善、效能最佳function redirect(string $url, int $status = 302): never {
header('Location: ' . $url, true, $status);
exit;
}
header('Location: ...'),應回傳 {"redirect": "url"} 由前端處理掌握三種跳轉方法的差異與適用場景,遵循「優先 Header、次之 Meta/JS、封裝統一、安全第一」原則,即能在各種業務情境下優雅、安全地實作 PHP 頁面跳轉。