首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現 301 永久重定向:標準寫法與常見坑點

     編輯:PHP 相關知識

標準 301 代碼

<?php
// 方法一:顯式發送狀態碼
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.example.com/");
exit;

// 方法二:一行搞定(推薦)
$url = 'https://www.example.com/';
header('Location: ' . $url, true, 301);
exit;
?>

301 vs 302 區別

狀態碼含義SEO 影響適用場景
301永久移動傳遞權重,搜索引擎更新索引域名遷移、HTTPS 強制、目錄結構永久調整
302臨時移動不傳遞權重,保留原索引臨時維護、A/B 測試、登錄跳轉

常見錯誤與解決

  1. Warning: Cannot modify header information
    • 原因:輸出內容(空白、echo、BOM)在 header 之前。
    • 解決:文件保存為 UTF-8 無 BOM;確保 header() 前無任何輸出;或開啟 output_buffering。
  2. 瀏覽器緩存 301 導致測試困難
    • 301 被瀏覽器強緩存,修改代碼後仍跳舊地址。
    • 解決:清除瀏覽器緩存、使用無痕模式、或開發時暫用 302 測試。
  3. Location URL 必須為絕對路徑
    • RFC 7231 要求絕對 URI,雖然現代瀏覽器兼容相對路徑,但規範寫法為完整 URL。

進階:條件重定向

// 強制 HTTPS
if ($_SERVER['HTTPS'] !== 'on') {
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
    exit;
}

// 多域名統一
$allowed = ['example.com', 'www.example.com'];
if (!in_array($_SERVER['HTTP_HOST'], $allowed)) {
    header('Location: https://www.example.com' . $_SERVER['REQUEST_URI'], true, 301);
    exit;
}

總結

PHP 實現 301 重定向核心是 header('Location: ...', true, 301) 並立即 exit。注意輸出緩衝、瀏覽器緩存、URL 規範三大坑點,正確使用可平滑遷移 SEO 權重。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved