進行 301 重定向的最佳方法
哪個是進行 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
表示此時將停止規則處理,因為要執行重定向。評分
我不知道任何測量或統計數據,但我認為虛擬主機中的重定向指令是最快或最有效的變體,因為
- 不需要載入重寫引擎
- 載入 Apache 伺服器時會記憶體 VHost,無需搜尋
.htaccess
文件對於 SEO 友好,變體沒有區別,對外總是發生 SEO 友好的 301 重定向,所以沒有區別。