Redirect

進行 301 重定向的最佳方法

  • July 15, 2022

哪個是進行 301 重定向的最佳方式(對於整個域以及特定頁面/目錄)?使用 Apache 虛擬塊、.htaccess 或其他解決方案?

對我來說,“最佳”可能意味著最快和最適合 SEO 的選項,但也許還有其他重要因素(安全性、更易於配置和維護……)。

現在我正在使用 Apache,但例如對於 https 顯然總是在重定向到新域之前檢查舊域的證書,所以也許有更快的解決方案?(我對這個問題了解不多,只是問問)

謝謝!

基本上有一些重定向選項,我認為沒有一種最好的方法,這取決於案例。

重定向的位置

虛擬主機

先決條件:您需要對虛擬主機配置的管理訪問權限。

如果舊域根本沒有內容並且應該完全重定向,則建議使用變體虛擬主機,因為DocumentRoot域必須不存在,因此文件系統中沒有目錄,如果舊域無論如何都沒有更多內容。

缺點:對於重定向的每次更改,都必須重新載入或重新啟動 Apache Web 伺服器。

.htaccess

如果無法訪問虛擬主機配置,例如在使用共享主機提供商進行主機託管時,則可以通過.htaccess文件在 Web 伺服器中“本地”執行重定向。

如果要定期更改重定向或由不應具有對 Apache Web 伺服器的管理訪問權限的使用者更改重定向,此變體也很有用。

文件變體的另一個優點.htaccess是可以更改重定向(前提是已正確配置域),而無需重新啟動或重新載入 Apache Web 伺服器。

通過 Apache Web 伺服器的重定向

重定向指令 (mod_alias)

最簡單的方法是使用模組中的Redirect指令mod_alias(必須啟用模組)。

重定向指令的語法是:

Redirect [status] [URL-path] URL

  • 例子
Redirect 301 /sub https://example-new1.com/
Redirect 301 / https://example.com/
  • 虛擬主機範例
<VirtualHost *>
 ServerName www.example-old.com
 Redirect 301 /sub https://example-new1.com/
 Redirect 301 / https://example.com/
</VirtualHost>

Redirect可以多次用於不同的 URL 路徑和重定向。重定向的條件可以通過Location或定義LocationMatch,更多內容(包括範例)在Redirect參考中。

還有一個RedirectMatch指令,它與指令等效Redirect,但支持正則表達式匹配。

重寫規則 (mod_rewrite)

RewriteRule更強大的條件是來自模組的重定向mod_rewrite(必須啟用模組)。

RewriteRule 指令的語法是:

RewriteRule Pattern Substitution [flags]

  • 例子
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example-old.com
RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
  • 虛擬主機範例
<VirtualHost *>
 ServerName www.example-old.com
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www.example-old.com
 RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>

請注意,重寫引擎必須通過 顯式啟用RewriteEngine on,儘管該mod_rewrite模組已在伺服器端啟用。

條件可以通過 定義RewriteCond,甚至可以定義幾個RewriteRule

的標誌RewriteRule

  • R=301表示使用 HTTP 狀態程式碼執行重定向301
  • L表示此時將停止規則處理,因為要執行重定向。

評分

我不知道任何測量或統計數據,但我認為虛擬主機中的重定向指令是最快或最有效的變體,因為

  1. 不需要載入重寫引擎
  2. 載入 Apache 伺服器時會記憶體 VHost,無需搜尋.htaccess文件

對於 SEO 友好,變體沒有區別,對外總是發生 SEO 友好的 301 重定向,所以沒有區別。

引用自:https://serverfault.com/questions/1105608