在 Web 開發中,頁面跳轉是極常見的需求。PHP 提供多種實作方式,各有適用情境與注意事項。本文整理三種主流方法並說明優缺點。
最標準、效能最好的方式。直接發送 HTTP Location 標頭,瀏覽器收到 3xx 狀態碼即跳轉。
<?php
header("Location: https://example.com/target.php");
exit; // 強制結束腳本,防止後續程式碼執行
?>
header() 前,不能有任何 HTML、空白、echo/print 輸出,甚至 BOM 標記都會導致「headers already sent」錯誤。Location: 後需接空格再接 URL,且建議使用絕對路徑。header("HTTP/1.1 301 Moved Permanently");。exit 或 die(),否則重導向後的 PHP 程式碼依會繼續跑完。適合需顯示提示訊息、倒數計時再跳轉的情境。
<?php
$url = "https://example.com";
$delay = 3; // 秒數
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="<?php echo $delay; ?>; url=<?php echo $url; ?>">
<title>頁面跳轉中...</title>
</head>
<body>
<p><?php echo $delay; ?> 秒後自動跳轉至 <a href="<?php echo $url; ?>">目標頁面</a></p>
</body>
</html>
可在任何邏輯判斷中動態決定跳轉時機與目標。
<?php
$url = "https://example.com";
?>
<script>
// 立即跳轉
window.location.href = "<?php echo $url; ?>";
// 或延遲跳轉
// setTimeout(function() { window.location.href = ""; }, 3000);
</script>
| 情境 | 推薦方法 | 理由 |
|---|---|---|
| 表單提交成功、權限驗證失敗、登入/登出 | header() | 伺服器端、無輸出干擾、SEO 友善、效能最佳 |
| 需顯示成功/錯誤訊息幾秒再跳轉 | Meta refresh | 純 HTML、無需 JS、支援倒數計時 |
| AJAX 回調、條件判斷複雜、單頁應用 | JavaScript | 彈性最高、可攜帶狀態、配合前端框架 |
ob_start() 開啟輸出緩衝,或調整程式結構確保 header 前零輸出。session_write_close() 或正確設定 cookie 域與路徑。掌握三種跳轉方式的特性與適用時機,能讓你的 PHP 應用程式在使用者體驗與架構正確性之間取得最佳平衡。