301 重定向(301 Moved Permanently)是 HTTP 狀態碼之一,表示請求的資源已永久移動到新位置。當用戶或搜索引擎訪問舊 URL 時,服務器返回 301 狀態碼並攜帶新地址(Location 標頭),客戶端隨即跳轉至新 URL。
| 方式 | 狀態碼 | 搜索引擎態度 | 適用場景 |
|---|---|---|---|
| 301 重定向 | 301 | 傳遞權重(PR),更新索引,無規範化問題 | 域名遷移、目錄重組、永久 URL 變更 |
| 302 臨時重定向 | 302 | 可能導致 URL 規範化問題,權重不傳遞 | 臨時維護、A/B 測試 |
| JavaScript/META Refresh | 200 | 常被視為作弊手法,搜索引擎敏感 | 極少數前端場景 |
核心優勢:
<?php
// 獲取完整請求 URI(含查詢字符串)
$url = "https://www.example.com" . $_SERVER["REQUEST_URI"];
// 發送 301 狀態碼(必須在 Location 之前)
header("HTTP/1.1 301 Moved Permanently");
// 指定新位置
header("Location: $url");
// 關鍵:阻止後續代碼執行
exit();
?>
將上述代碼放入入口文件最頂部(任何輸出之前):
index.phparchiver/index.phpforumdisplay.phpviewthread.phpspace.phptag.phpblog.php原則:所有可能被直接訪問的 PHP 入口文件都需添加。
使用 curl 命令檢查響應頭:
curl -I https://old-domain.com/thread-123.html
成功標誌:
HTTP/1.1 301 Moved Permanently
Location: https://www.new-domain.com/thread-123.html
exit() 或 die() 終止腳本,防止繼續執行對於靜態資源或全站跳轉,建議在 Web 服務器層配置:
# Apache (.htaccess)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com [NC]
RewriteRule ^(.*)$ https://www.new-domain.com/$1 [R=301,L]
# Nginx
server {
server_name old-domain.com;
return 301 https://www.new-domain.com$request_uri;
}