.htaccess能夠透過簡單的幾行程式碼,實現301或302的轉址,讓舊的網址自動跳轉至指定的新網址,改善使用者體驗,避免錯誤畫面的情況。何時使用301或302重定向取決於轉址的目的和意圖,對SEO排名也有不同的影響。
.htaccess是Apache Web Server的配置文件,用於控制目錄和子目錄的行為。大部分基於Linux的網站使用Apache進行託管,因此.htaccess文件在這些系統中預設存在。
對於有大量舊網址需要遷移的情況,使用.htaccess文件來建立Redirect規則是一個好的選擇。
以下是常見的.htaccess Redirect規則:
- 重定向單個頁面:
Redirect 301 /old-page.html https://example.com/new-page.html
- 重定向整個網站/網域到新網站/網域:
Redirect 301 / https://newsite.com/
- 重定向整個網站/網域到子目錄:
Redirect 301 / https://example.com/subfolder/
- 重定向子目錄到新網站:
Redirect 301 /subfolder https://newsite.com/
- 重定向後綴檔案編碼,保留前面所有檔案名稱:
RedirectMatch 301 (.*).html$ https://example.com$1.php
- 使用Rewrite規則重定向舊網域至新網域:
RewriteEngine on
RewriteBase /
RewriteRule (.*) https://newsite.com/$1 [R=301,L]
- 使用Rewrite規則重定向non-www網域至www子網域:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,NC]
- 使用Rewrite規則重定向non-www網域至帶有子目錄的www網域:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/directory/index.html [R=301,NC]
- 使用Rewrite規則重定向舊網域至新網域,包含完整路徑和查詢參數
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*) https://www.newsite.com%{REQUEST_URI} [R=302,NC]
- 使用Rewrite規則重定向舊網域子目錄至新網域,保留完整路徑和查詢參數:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/oldsubfolder/(.*)$
RewriteRule ^(.*) https://www.newsite.com/%1 [R=302,NC]
- 使用Rewrite規則將具有查詢參數字串的檔案重定向至根目錄:
RewriteEngine on
RewriteCond %{QUERY_STRING} id=10
RewriteRule ^index.php$ /new-path/? [L,R=301]
- 強制將https網址轉為http:
RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
- 強制將http網址轉為https:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
- 刪除網址後綴,例如index.html或index.php,並重定向至根目錄:
RewriteEngine On
RewriteCond %{THE_REQUEST} /index.php HTTP [NC]
RewriteRule (.*)index.php$ /$1 [R=301,L]
- 保留參數字串,將參數字串作為目錄名稱,並重定向至根目錄:
RewriteEngine On
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA]
- 保留參數字串,將參數字串作為目錄名稱,並重定向至子目錄:
RewriteEngine On
RewriteRule ^/?category/([^/d]+)/?$ index.php?category=$1 [L,QSA]
- 將舊網站重定向至新網域,保留其他原始URL路徑:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^oldsite.com$ [NC]
RewriteRule ^(.*)$ https://newsite.com/$1 [R=301,L]
- 將存於根目錄的部落格文章重定向至/blog/子目錄:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI}/blog
RewriteRule ^(.*) https://blogsite.com/%{REQUEST_URI} [R=302,NC]
- 將一個目錄重定向至另一個目錄:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)/old-directory/(.*)$ $1/new-directory/$2 [R,L]
301轉址是一種永久重定向,將舊網址轉移到新網址,告訴搜尋引擎和瀏覽器該網頁已永久移動到新的位置。這對於維護網站的SEO排名非常重要,因為它會傳遞舊網址的權重和價值給新網址,並幫助保持原始網址的排名和搜索引擎收錄。使用301轉址也可以幫助消除重複內容問題,提供更好的使用者體驗,並確保搜尋引擎能夠正確索引你的網頁。
另一方面,302轉址是一種臨時重定向,告訴搜尋引擎和瀏覽器該網頁暫時移到新的位置。相比於301轉址,302轉址不會將權重和價值傳遞給新網址,且搜索引擎可能會保留原始網址的排名。這種轉址適用於臨時的網站搬遷或頁面重建,但若想長期保持SEO優勢,建議仍然使用301轉址。
綜上所述,根據不同的情況和目的,可以選擇使用301或302轉址。如果你的網站有大量舊網址需要遷移,使用.htaccess文件進行轉址是一種簡單且有效的方法。而對於使用WordPress的用戶,外掛”Simple 301 Redirects”可以方便地進行301轉址的設定。
無論使用哪種方式,確保適當地進行轉址和保持良好的SEO實踐,將有助於提升網站的流量和排名,提供更好的使用者體驗。記得在進行轉址前做好相關的測試,確保轉址設定正確,以免影響網站的運行和SEO表現。如果遇到任何疑問,建議向專業的SEO專家尋求幫助和建議。