當網站換域名、調整目錄結構或更換文件名稱時,301 永久重定向是保障搜尋引擎流量不流失、權重平滑轉移的標準方案。本文詳解 PHP 實現 301 重定向的核心代碼與 .htaccess 替代方案。
統一域名入口,集中權重:
<?php
$host = $_SERVER['HTTP_HOST']; // 獲取訪問域名
$requestUri = $_SERVER['REQUEST_URI'] ?? ''; // 獲取請求路徑含查詢串
if ($host !== 'www.example.com') { // 目標規範域名
header('HTTP/1.1 301 Moved Permanently'); // 發送 301 狀態碼
header("Location: https://www.example.com$requestUri"); // 保持路徑不變
exit; // 關鍵:阻止後續代碼執行
}
?>
HTTP/1.1 301 Moved Permanently,再發送 Location,順序不可顛倒。$_SERVER['REQUEST_URI'] 保留原請求路徑與查詢參數,實現頁面級一對一映射。exit 或 die() 防止腳本繼續執行輸出內容,導致頭部已發送錯誤。header() 之前。在 Web 服務器層面處理,效能優於 PHP,且不消耗 PHP-FPM 進程:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
R=301:發送 301 狀態碼L:最後一條規則,停止後續匹配NC:不區分大小寫匹配域名curl -I https://example.com/page
# 應返回:
# HTTP/1.1 301 Moved Permanently
# Location: https://www.example.com/page
https://www.example.com,避免雙重跳轉。301 永久重定向是網站遷移、域名規範化的基石。PHP 實現靈活適合動態邏輯,.htaccess/Nginx 配置效能更優適合全站規則。核心原則:正確狀態碼 + 保持 URI + 立即退出 + 避免鏈式跳轉。配合站長工具提交,讓權重平滑過渡,流量零損失。