我需要幫助,而且需要盡快。
我們最近遷移了一個子網域以與網域整合。
例如。https://blog.example.com
到https://www.example.com/blog
https://blog.example.com
有大量我們不想失去的流量。所以我們需要做301重定向。
問題是https://blog.example.com
有超過 200 個頁面表現良好。
我需要建議如何將所有頁面重新導向到新位置的相應頁面,而不減慢網站速度或使伺服器超載。
我們嘗試了
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]
但只有首頁 pahe 被重定向
我們是否必須逐一重定向這些頁面?
答案1
我們嘗試了
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]
您說您“最近遷移了子網域”,但是,您發布的程式碼不針對子網域並且與您在問題中描述的範例主機名稱衝突?
如果您將其放在文件中的錯誤位置,這將重定向“僅主頁 pahe” .htaccess
。例如。如果您已放置它後對前端控制器的內部重寫。此重定向需要位於根.htaccess
文件的最頂部。
不會減慢網站速度或使伺服器超載。
200 個類似的 URL 重定向在效能/開銷方面微不足道。然而,為了完全最小化這些重定向可能產生的所有影響,blog
子域應該指向檔案系統的不同區域,這進一步簡化了重定向。 (事實上,您不需要將子網域指向任何特定目錄,而是直接在伺服器配置/虛擬主機中執行重定向,而不是.htaccess
。)
然後可以使用單一 mod_aliasRedirect
指令(在.htaccess
或<VirtualHost>
容器中)執行「200 次重定向」。例如:
Redirect 301 / https://www.example.com/blog/
該Redirect
指令是前綴匹配的,並且匹配後的所有內容都會複製到目標 URL 的末尾。例如,http(s)://blog.example.com/anything
301 是否重定向到https://www.example.com/blog/anything
.
否則,如果您的子網域和主域指向檔案系統上的相同位置,則使用 mod_rewrite 檢查請求的主機名,就像您最初所做的那樣(儘管不確定為什麼要檢查example.com
或者 www.example.com
當您應該檢查子網域時blog.example.com
)。
例如,在非常頂級根.htaccess
文件的:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
這個NC
標誌是多餘的,因為正規表示式.*
已經符合所有內容。
或者,在指令REQUEST_URI
中使用伺服器變數RewriteRule
並避免反向引用。例如:
:
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
伺服器REQUEST_URI
變數已包含斜線前綴。
首先使用 302(臨時)重定向進行測試以避免潛在的快取問題。並確保在測試之前已清除瀏覽器快取。