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

PHP 實現 301 永久重定向完整指南

     編輯:PHP 綜合知識

什麼是 301 重定向?

301 重定向(301 Moved Permanently)是 HTTP 狀態碼之一,表示請求的資源已永久移動到新位置。當用戶或搜索引擎訪問舊 URL 時,服務器返回 301 狀態碼並攜帶新地址(Location 標頭),客戶端隨即跳轉至新 URL。

為什麼選擇 301 而非其他跳轉方式?

方式狀態碼搜索引擎態度適用場景
301 重定向301傳遞權重(PR),更新索引,無規範化問題域名遷移、目錄重組、永久 URL 變更
302 臨時重定向302可能導致 URL 規範化問題,權重不傳遞臨時維護、A/B 測試
JavaScript/META Refresh200常被視為作弊手法,搜索引擎敏感極少數前端場景

核心優勢:

  1. 解決網址規範化問題(www/非 www、http/https 統一)
  2. 完整傳遞頁面權重(PageRank)
  3. 域名更換時保持收錄不受影響

PHP 實現 301 重定向代碼

<?php
// 獲取完整請求 URI(含查詢字符串)
$url = "https://www.example.com" . $_SERVER["REQUEST_URI"];

// 發送 301 狀態碼(必須在 Location 之前)
header("HTTP/1.1 301 Moved Permanently");
// 指定新位置
header("Location: $url");
// 關鍵:阻止後續代碼執行
exit();
?>

部署位置指南(以 Discuz! 6.0 為例)

將上述代碼放入入口文件最頂部(任何輸出之前):

  • index.php
  • archiver/index.php
  • forumdisplay.php
  • viewthread.php
  • space.php
  • tag.php
  • blog.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

常見坑點提醒

  • header() 之前不能有任何輸出(包括空白字符、BOM 頭)
  • 使用 exit() 或 die() 終止腳本,防止繼續執行
  • 新域名需已正確配置 SSL 證書(若強制 HTTPS)
  • 搜索引擎收錄更新需時間,耐心等待

進階:Apache/Nginx 層面實現(性能更優)

對於靜態資源或全站跳轉,建議在 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;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved