萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 電腦入門

網站 301 永久重導向實作指南:PHP、Apache、Nginx、IIS 全平台覆蓋

什麼是 301 重導向?

HTTP 狀態碼 **301 Moved Permanently** 告訴瀏覽器與搜尋引擎:資源**永久移動**至新 URL。搜尋引擎會將舊 URL 的權重 (PageRank、收錄、錨文字) **傳遞** 給新 URL,是域名遷移、網站改版、HTTPS 強制、WWW 統一、URL 結構調整的**唯一正規作法**。

核心優勢

  • ✅ **權重傳遞**:舊頁 SEO 權重 (PR/權重流) 最大程度傳給新頁。
  • ✅ **無標準化問題**:避免 302 暫時導向導致的雙重收錄、權重分散。
  • ✅ **用戶無感**:瀏覽器自動跳轉,收藏夾/外部連結自動更新。
  • ✅ **快取友善**:瀏覽器/CDN 可快取 301 回應,減少回源壓力。

實作方案:四大主流平台

1. PHP (通用、靈活、應用層控制)

<?php
// 必須在**任何輸出之前**執行 (含空白、BOM、HTML)
$newDomain = 'https://newdomain.com';
$requestUri = $_SERVER['REQUEST_URI'];
$targetUrl = $newDomain . $requestUri;

// 發送 301 標頭
header("HTTP/1.1 301 Moved Permanently", true, 301);
header("Location: $targetUrl");
header("Connection: close"); // 建議關閉連線
exit(); // 關鍵:終止後續腳本執行
?>

進階:條件式導向 (如僅導向特定目錄、保留查詢字串、排除特定路徑) 皆可在 PHP 中靈活實現。

2. Apache (.htaccess / httpd.conf)

RewriteEngine On
# 強制 HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 強制 WWW (或非 WWW)
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# 域名遷移 (保留完整路徑與查詢字串)
RewriteCond %{HTTP_HOST} ^old\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.old\.com$ [NC]
RewriteRule ^(.*)$ https://new.com/$1 [R=301,L,QSA]

放入網站根目錄 .htaccess 或虛擬主機配置 <VirtualHost> 內。需啟用 mod_rewrite 且 AllowOverride All。

3. Nginx (高效能、配置簡潔)

server {
    listen 80;
    server_name old.com www.old.com;
    # 全站 301 至新域名,保留 URI 與查詢字串
    return 301 https://new.com$request_uri;
}

# 或特定目錄導向
location /old-section/ {
    return 301 https://new.com/new-section$request_uri;
}

return 301 為 Nginx 原生指令,效能優於 rewrite,無正則開銷。

4. IIS (web.config / 管理介面)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect Old Domain" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^old\.com$" />
            <add input="{HTTP_HOST}" pattern="^www\.old\.com$" />
          </conditions>
          <action type="Redirect" url="https://new.com/{R:1}" redirectType="Permanent" />
        </rule>
        <!-- 強制 HTTPS -->
        <rule name="Force HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

或使用 IIS 管理員 → 「URL 重寫」模組 → 新增規則 → 範本「標準重寫」→ 動作類型選「重導向」→ 重導向類型「永久 (301)」。

驗證 301 生效

# cURL 檢查回應標頭
curl -I https://old.com/some/page
# 預期輸出:
# HTTP/1.1 301 Moved Permanently
# Location: https://new.com/some/page
# Content-Length: 0
# Connection: close

# 線上工具: httpstatus.io, redirect-checker.org, SEO 擴充功能 (Redirect Path, Ayima)

避坑指南

  • ❌ **不要用 302/303/307** 做永久遷移 (權重不傳遞/部分傳遞)。
  • ❌ **不要用 Meta Refresh / JavaScript location.href** (搜尋引擎難解析、權重流失、用戶體驗差)。
  • ❌ **避免導向鏈** (A→B→C):**直接導向最終目標**,每跳損耗權重與延遲。
  • ❌ **導向無關內容** (首頁/錯誤頁):**一對一對映**相關內容,否則視為 Soft 404,權重歸零。
  • ✅ **保留查詢字串** (QSA / $request_uri / {R:1}),確保追蹤參數、分頁、篩選器運作。
  • ✅ **更新 XML Sitemap、內部連結、Canonical 標籤** 指向新 URL。
  • ✅ **在 Google Search Console / Bing Webmaster Tools 提交「網址變更」**。
  • ✅ **監控 404 日誌與搜尋主控台收錄狀態** 至少 6 個月。

特殊場景:單頁應用 (SPA) 歷史模式

SPA 使用 History API,伺服器需將所有非靜態資源請求導向 index.html,**不可使用 301** (會破壞客戶端路由)。正確配置:

# Nginx
location / {
    try_files $uri $uri/ /index.html;
}
# Apache .htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]

301 重導向是 SEO 遷移的基石,正確實作與驗證,守住您辛苦累積的搜尋資產。

copyright © 萬盛學電腦網 all rights reserved