什麼是 .htaccess?為何用於設定轉址?
.htaccess 是 Apache 網頁伺服器的一個分散式設定檔,通常放置於網站的特定目錄中。它的主要作用是允許網站管理員在不修改伺服器主設定檔的情況下,對該目錄及其子目錄進行配置。在技術 SEO 與網站管理實務中,.htaccess 最常見且關鍵的用途之一就是設定伺服器層級的重新導向(Redirect),也就是俗稱的轉址。
由於 .htaccess 的設定會即時生效(無需重啟 Apache 伺服器),它成為了快速調整網站 URL 結構、修復失效連結或執行全站遷移的利器。當你的網站網址結構發生永久性變動時,透過 .htaccess 設定轉址是通知搜尋引擎與瀏覽器新位置的標準做法。
這種分散式設定檔的優勢在於它提供了靈活的目錄級別控制,每個目錄都可以擁有獨立的設定,無需影響整個伺服器的運作。同時,即時生效的特性意味著網站管理員可以立即部署更改,大大提升了管理效率與回應速度。
301 永久轉址:語法、原理與 SEO 意義
301 重導向在 HTTP 狀態碼中代表「永久移動」(Moved Permanently)。當伺服器回傳此狀態碼時,瀏覽器會自動跳轉到新的網址,同時搜尋引擎會理解舊網址的內容已永久遷移至新網址。這項機制的核心 SEO 意義在於,它能協助將舊網址累積的頁面權重(如反向連結、歷史表現)有效地傳遞到新網址,從而最大程度地維持原有的搜尋排名表現。
相較於僅顯示 404 錯誤,正確設定 301 轉址能避免使用者體驗中斷,並防止搜尋引擎將資源浪費在索引已失效的頁面上。對於網站重構、更換網域或合併內容等情況,301 轉址是維持 SEO 穩定性的技術性必要措施,而非提升排名的魔法。若想更全面理解網站技術架構對 SEO 的影響,可參考我們的 技術 SEO 完整解析。
從原理上來說,當搜尋引擎爬蟲遇到 301 狀態碼時,它會更新索引中的 URL 記錄,將權重與連結信號轉移到新地址,這有助於保持網站的整體權威性與流量穩定性。這個過程通常需要一段時間才能完全生效,但正確設定能最小化排名波動。
基礎 .htaccess 轉址語法:從單一頁面到整個目錄
設定 .htaccess 轉址主要會用到 `Redirect` 和 `RewriteRule` 兩種指令。`Redirect` 指令語法較為簡單直觀,適合處理單一頁面或整個目錄的轉址。`RewriteRule` 則提供了更強大的正則表達式支持,適合處理複雜的 URL 重寫與轉址邏輯。
單一頁面轉址範例:
這條規則會將所有對 `/old-article.html` 的請求,以 301 永久重導向的方式指向 `/new-article.html`。
Redirect 301 /old-article.html /new-article.html
整個目錄轉址範例:
若要將 `/old-products/` 目錄下的所有頁面,分別轉址到 `/new-catalog/` 目錄下相同檔名的頁面,可以使用 `RedirectMatch` 或 `RewriteRule`。以下使用 `RewriteRule` 的寫法,其中 `$1` 代表匹配到的第一個括號內容。
RewriteEngine On RewriteRule ^old-products/(.*)$ /new-catalog/$1 [R=301,L]
這裡的 `RewriteEngine On` 用於啟用重寫引擎,而 `[R=301,L]` 參數分別指定重導向類型為 301,並標記為最後一條匹配規則,以避免後續規則干擾。
常見轉址場景實戰:加 www、HTTP 轉 HTTPS
在網站優化過程中,有兩個標準的轉址場景幾乎會遇到:統一網址格式(如強制使用 www)以及將 HTTP 請求導向更安全的 HTTPS 連線。這些設定能避免因網址格式重複而分散頁面權重,並提升網站安全性。
統一網址至帶 www 版本:
這段程式碼的邏輯是:如果訪客輸入的是不帶 `www` 的網址(如 `domain.com`),伺服器會將其永久重導向到帶 `www` 的版本(如 `www.domain.com`)。請記得將 `domain.com` 替換為你自己的網域名稱。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
HTTP 全站轉址至 HTTPS:
這是現代網站的標準設定。以下規則會將所有透過 HTTP 協定的請求,全部轉址至 HTTPS。同樣,請替換網域。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
統一網址格式的必要性在於避免搜尋引擎將重複內容視為多個獨立頁面,從而稀釋權重。而 HTTPS 轉址則透過加密通訊來保護使用者資料,增強網站的可信度與合規性。
除了 301,還有 302 臨時轉址:何時該用?
302 狀態碼代表「暫時移動」(Moved Temporarily)。當伺服器回傳 302 時,瀏覽器同樣會跳轉,但搜尋引擎會理解原網址的內容只是暫時移到新位置,未來可能會移回原處。因此,Google 明確指出,302 重導向通常不會傳遞原網址的頁面權重到新網址。
在 `.htaccess` 中設定 302 轉址,只需將狀態碼從 `301` 改為 `302` 即可。適用於 302 的場景包括:網站短期維護時導向公告頁、進行 A/B 測試將部分流量導向測試頁面,或是季節性活動頁面的暫時性導流。選擇 301 或 302 的關鍵在於「永久」或「暫時」的決策,錯誤的選擇可能導致搜尋引擎混淆,影響索引與權重傳遞。
相較於 301,302 重導向更適合用於短期變動,因為它保留了原始網址的索引權重,避免了不必要的 SEO 影響。這使得管理員在處理臨時性調整時,能更靈活地控制流量走向,而不會損害長期的搜尋表現。
設定完怎麼檢查?常見錯誤與排查清單
完成 .htaccess 轉址設定後,務必進行驗證。首先,最直接的方法是在瀏覽器的無痕模式或不同裝置中,嘗試訪問設定好的舊網址,觀察是否正確跳轉至新頁面。其次,使用 `curl` 指令進行測試,能更精確地查看伺服器回傳的狀態碼。在終端機輸入 `curl -I 舊網址`,在回傳的結果中應看到 `HTTP/1.1 301 Moved Permanently` 及 `Location: 新網址`。
常見的錯誤與排查方向包括:規則順序錯誤:在 .htaccess 中,規則是自上而下匹配執行的,若多個規則可能衝突,應將更具體的規則放在前面。遺漏 [L] 標記:在使用 `RewriteRule` 時,結尾加上 `[L]`(Last)表示這是最後一條匹配的規則,可避免後續規則繼續執行引發問題。正則表達式錯誤:複雜的匹配規則容易出錯,建議先從簡單語法開始,並善用線上正則表達式測試工具。若轉址出現異常循環(如網址反覆跳轉),通常是規則設計過於寬鬆或與伺服器其他設定衝突所致。
為了確保設定正確,建議在部署前先在本地或測試環境中驗證,並逐步檢查每個規則的邏輯。使用工具如線上 htaccess 測試器或 Apache 日誌,可以幫助快速定位問題,提升排查效率。