在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 必須在任何輸出前調用<br> 一旦頁面有輸出(如echo、HTML 標籤或空格),再使用header()將會報錯:“Cannot modify header information”可以通過ob_start()開啟輸出緩衝區來避免這一問題。
使用絕對路徑更安全<br> 雖然可以使用相對路徑,如Location: dashboard.ph p ,但推薦使用絕對路徑或完整URL,以避免路徑錯誤
結合HTTP 狀態碼使用<br> 可通過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 標準的重定向策略。