我做過的網站遷移中最糟糕的一個小時是盯著即時網站上的 500 錯誤,原因是 。htaccess 檔案中的一個雜散字元。我手寫了一批用於 WordPress 重建的重定向,用胖手指編寫了 RewriteRule 標誌,Apache 的回應是拒絕為整個網域提供服務。重定向本身很好;它們周圍的語法不是,。htaccess 是無情的。之後我停止手動編寫重定向規則並開始生成它們,這正是 htaccess 重定向產生器 在 toolz。dev 上可以。本指南涵蓋了 Apache 如何重定向工作、何時使用每種類型以及如何在不破壞任何內容的情況下規範化 HTTPS 和 www。
TL;DR: 。htaccess 檔案告訴 Apache 如何重定向 URL。使用 301 進行永久移動,使用 302 進行臨時移動
Redirect對於精確的路徑,和RewriteRule對於模式。這 htaccess 重定向產生器 從一個簡單的清單中建立所有這些加上強制 HTTPS 和 www 規則,完全在您的瀏覽器中正確排序,不上傳任何內容。
什麼是 htaccess 重定向產生器?
。htaccess 重定向產生器將新舊 URL 映射的簡單清單轉換為執行重定向的精確 Apache 指令。您選擇的狀態代碼是協定問題,而不是 Apache 問題: RFC 9110 將 301 定義為永久,將 302 定義為已找到。 。htaccess 檔案是 Apache 在每個請求上讀取的每個目錄設定文件,在共享託管上,它通常是您可以聲明重定向的唯一位置,因為您無法編輯主伺服器配置。生成器寫入 Apache 支援的兩種重定向類型:mod_alias Redirect 直接一對一路徑變更的指令,以及 mod_rewrite RewriteRule 同時捕獲許多 URL 的模式匹配指令。
產生這些而不是輸入它們的原因是。htaccess 語法精確且懲罰性強。錯誤的標誌、模式中未轉義的點或錯誤順序的規則不會產生警告;它會產生 500 個錯誤,導致整個網站癱瘓,直到找到並修復它。指令也必須以特定順序出現,重寫引擎在任何 RewriteRule 之前打開,網站範圍的規則在頁面級規則之前打開,或者它們的行為不端難以調試。生成器對順序和語法進行編碼,因此您不會得到微妙的錯誤。
在 toolz。dev 上,流程反映了您對遷移的實際看法。您列出每條舊路徑及其新目的地,選擇移動是永久的還是暫時的,以及它是精確的路徑還是模式,並選擇切換幾乎每個站點都需要的兩個站點範圍規則。該工具以正確的順序組裝整個文件,並在將路徑貼到網站之前標記任何可疑內容,例如將路徑重新導向到其自身的規則。
301 和 302 重定向有什麼不同?
301 是永久重定向,302 是臨時重定向,對於搜尋引擎來說,這種區別是重點。 301 告訴瀏覽器和爬蟲,頁面已經永久移動,搜尋引擎透過傳輸幾乎所有舊 URL 和#39 來回應;將累積的排名訊號傳送到新位址,並最終從索引中刪除舊 URL。 302 告訴他們移動是暫時的,因此他們保留原始 URL 索引和排名,並將目的地視為將消失的替身。
選擇錯誤的方法會產生真正的後果。使用 302 進行永久移動,搜尋引擎可能會保留舊 URL 的排名,而您的新頁面很難累積自己的權威,因為訊號從未傳輸。使用 301 進行真正臨時的操作,例如因維護而停下來的頁面或季節性登陸頁面,一旦情況恢復,您可能會永久失去原始頁面的排名。經驗法則很簡單:如果舊 URL 永遠不會回來,請使用 301;如果是,請使用 302。
以下是兩者在重要屬性上的比較:
| 財產 | 301 永久 | 302 臨時的 |
|---|---|---|
| 意義 | 佩奇已經永遠移動了 | 佩奇暫時在其他地方 |
| 排名訊號 | 轉移到新的 URL | 保留原始 URL |
| 索引中的舊 URL | 最終掉落 | 保留 |
| 典型用途 | 重新設計、遷移、合併頁面 | 維護、A/B 測試、季節性頁面 |
| 瀏覽器快取 | 積極地緩存 | 預設情況下不會快取 |
生成器可讓您設定每個規則的狀態,因此遷移主要是永久移動,帶有一個臨時促銷重定向,它是一個混合列表,而不是兩個文件。由於瀏覽器會積極快取 301,因此第一次就值得正確處理它們;錯誤的 301 可能會在訪客中持續存在'在修復伺服器很久之後仍然使用瀏覽器。
我應該什麼時候使用重定向而不是重寫?
使用 Redirect 精確的一對一路徑變更指令,以及 RewriteRule 當您需要匹配模式時。 Redirect 301 /old-page /new-page 是移動單一頁面的整個規則,它是可讀的,很難出錯,並由 Apache' 處理;s mod_alias 模組。當您有一些特定頁面(每個頁面都移動到特定的新位置)時,會列出 Redirect 線路是最清晰、最安全的表達方式。
一個 RewriteRule 當一條規則需要捕獲多個 URL 時,就會變得複雜。如果下面的每個帖子 /blog/2023/ 移到同一條沒有年份的道路上,寫了一個 Redirect 每個帖子的行有數百條規則;一個 RewriteRule ^blog/2023/(.*)$ /blog/$1 [R=301,L] 透過在一年後捕獲該部分並在目的地重複使用它來處理所有這些。力量來自正規表示式和捕獲組,但風險也來自正規表示式和捕獲組,因為未逃脫的特殊角色或貪婪模式可以比您預期的匹配更多。
生成器根據您根據規則選擇的匹配類型為您選擇正確的指令:精確規則變為 Redirect 線條和圖案規則成為 RewriteRule 當存在任何模式規則時,重寫引擎會自動開啟線路。它還可以使輸出中的兩組保持正確的順序。如果您是編寫模式本身的新手,則 正規表示式測試儀 讓您在信任樣本 URL 的重定向之前檢查其模式,這就是我確認捕獲群組執行我期望操作的方式。
如何在 htaccess 中強制使用 HTTPS?
若要強制 HTTPS,您新增一個重寫條件,用於檢查目前請求是否尚未安全,然後新增一個規則,用於重定向到相同主機和路徑的 https 版本。標準表單檢查 %{HTTPS} off 然後重寫為 https://%{HTTP_HOST}/$1 使用 301,因此每個普通 HTTP 請求都會永久升級到相同 URL 的加密版本。在沒有此重定向的情況下透過 http 和 https 為網站提供服務意味著搜尋引擎可以對每個頁面的兩個版本進行索引,從而在它們之間分割排名訊號。
微妙之處在於排序。 HTTPS 規則必須在任何主機重寫之前運行,例如添加或刪除 www,以便這些後續規則也會登陸安全方案,而不是將訪客從 http 發送到 https,然後透過第二次重定向。犯錯會產生重定向鏈,其中單一請求在到達之前會彈跳兩到三跳,這對使用者來說速度較慢,並且會稀釋重定向的排名優勢。正是出於這個原因,生成器將 HTTPS 規則放在第一位。
在工具中開啟強制 HTTPS,它會在輸出頂部插入正確的條件和規則,然後再進行頁面重定向和 www 規則。因為 HTTPS 現在是一個基線期望而不是一個可選的額外期望,並且瀏覽器越來越多地將普通 http 頁面標記為不安全,因此這是我添加到基本上每個網站的規則。它自然地與接下來涵蓋的規範主機規則配對,並且它們一起將網站定位於每個頁面的恰好一個位址上。
如何將 www 重定向到非 www 或相反?
您可以使用重寫規則規範化 www 前綴,該規則檢查主機並重新導向到您選擇的版本。要刪除 www,請將開頭的主機與 匹配 www.,捕獲其餘部分,然後重定向到裸域;要新增 www,您要匹配不以 開頭的主機 www. 並重定向到前綴版本。無論哪種方式,目標都是在一個規範主機上存取每個頁面,因為兩個主機都提供相同的內容 www.example.com 和 example.com 是一個經典的重複內容問題,它像未解決的 http/https 分割一樣分割排名訊號。
與非 www 或相反,www 沒有 SEO 優勢;重要的是你選擇一個並一致地執行它。歷史上,大型網站出於技術原因在 cookie 和子網域上使用 www,而許多現代網站為了簡潔而放棄它。重要的是,一旦您選擇,每個連結、每個規範標籤和每個重定向點都指向同一版本,因此搜尋引擎會將您的所有權限合併到一個主機上,而不是分割它。
生成器提供單一 www 設定,並提供三個選項:保持不變、強制 www 或刪除 www。它寫入匹配條件和規則並將其放置在 HTTPS 規則之後,以便兩者合作而不是連結。您選擇的主機也應該位於您的規範標籤和網站地圖中,因此值得產生您的主機 網站地圖 使用相同的規範主機並在匹配中聲明您的爬行規則 機器人.txt. 這三者的一致性使得規範化實際上得以堅持。
這些重定向在 nginx 上有效嗎?
否。。htaccess 格式特定於 Apache Web 伺服器和故意模擬它的伺服器,尤其是 LiteSpeed。 Nginx 根本不讀取。htaccess 檔案;它完全忽略它們,因此將 Apache 指令貼上到 Nginx 設定中沒有任何作用。 Nginx 使用自己的方式處理重定向 return 和 rewrite 裡面的指令 server 和 location 主配置中的區塊,使用不同的語法和不同的評估模型。
這很重要,因為將正確的規則應用於錯誤的伺服器會產生數量驚人的重定向問題。如果無論您編寫什麼內容,您的重定向似乎都被忽略,那麼首先要檢查的是哪個 Web 伺服器實際上正在為您的網站提供服務,因為 Nginx 主機上的。htaccess 檔案是惰性的。特別是託管 WordPress 主機有時會在 Apache 前面或取代 Apache 運行 Nginx,而您仔細編輯的。htaccess 檔案沒有任何效果。
生成器產生 Apache 語法,它涵蓋了絕大多數共享託管以及運行 Apache 或 LiteSpeed 的任何主機。如果您使用的是 Nginx,則規則的邏輯直接轉換,永久重定向仍然是 301,規範主機仍然是規範主機,但必須為 Nginx' 重寫語法;s 指令,這是您的主機' 的作業;s 配置而不是。htaccess 檔案。在開始之前知道您使用的是哪台伺服器可以避免我整個下午都看到的混亂。
我什麼時候才能真正使用它?
網站遷移是主要情況。每當我重建一個網站時,無論是WordPress 專案遷移到新的URL 結構還是取代舊結構的新建置,每個具有流量或反向連結的舊URL 都需要301 才能到達其新主頁,或者流量和權限蒸發到404。一次列出這些映射並產生重定向區塊,正確排序且語法乾淨,比手動編輯可以透過一個拼字錯誤刪除網站的文件安全得多。模式規則處理作為一個群組移動的整個部分。
執行 HTTPS 和規範主機是家常便飯。即使在沒有頁面級重定向的網站上,force-HTTPS 和 www 規則也值得添加,以整合排名訊號並滿足瀏覽器現在期望的安全基線。我基本上為每個新網站生成了這兩條規則,並在啟動前將它們粘貼到其中,因此該網站從第一天起就是規範的,而不是在重複版本已被索引後稍後進行清理。
事實結束後進行清理。舊的重定向會積累,有些會通過兩到三個跳躍鏈,有些會指向此後再次移動的頁面。透過工具提供的循環和格式警告從乾淨的清單中重新產生整個區塊,是將這些鏈扁平化回單一跳躍的好方法。重定向是現場 SEO 的一個角落,它們位於旁邊 元標籤產生器 以及頁面工具包的其餘部分;我在瀏覽器中提出了在瀏覽器中保留這種實用性的更廣泛的案例 web 開發人員工具包指南,以及生產力角度 開發人員生產力工具指南.
我的 URL 資料是私有的嗎?
是的。每條規則都是在瀏覽器內的 JavaScript 中產生的。您輸入的 URL、網域和重定向地圖永遠不會被傳輸、記錄或存儲,並且一旦頁面加載,該工具就可以在沒有網路連接的情況下繼續工作。重定向地圖實際上是您網站的圖表'其結構及其最有價值的頁面,雖然它不像密碼那樣保密,但沒有理由流過其他人'伺服器只是為了組裝文字檔案。
因為工作發生在本地,所以您可以計劃離線遷移,在沒有連接的筆記型電腦上生成規則,並在準備好時將它們粘貼到其中,而無需網站的任何部分' URL 結構離開設備。 toolz。dev 上的每個工具背後的本地優先方法是相同的,這意味著該工具在飛機上和在辦公桌上一樣可用。我在該文件中提出了偏好從不上傳資料的基於瀏覽器的工具的一般論點 線上工具指南中的資料隱私.
問號
301 和 302 重定向有什麼不同?
301 是一個永久重定向:它告訴瀏覽器和搜尋引擎頁面已永久移動,並傳遞幾乎所有舊 URL 和#39;排名訊號到新的。 302 是暫時的:它轉發訪客,但表示原始 URL 應保留其排名並且可以返回。使用 301 進行永久移動,僅當更改真正是暫時的時才使用 302。
我該將 htaccess 檔案放在哪裡?
將 .htaccess 檔案放在網站的根目錄中,通常是也包含 index.php 或 index.html 的資料夾。 在那裡宣布的重定向適用於整個網站。 檔案名稱以點開頭且沒有副檔名,並且 Apache 必須為大多數共用主機預設配置的目錄啟用 allowoverride。
我應該什麼時候使用重定向而不是重寫?
使用 mod_alias 重定向指令進行簡單的一對一路徑變更,例如 /old-page 到 /new-page。 當您需要匹配模式時,請使用 mod_rewrite rewriterule,例如將 /blog/2023/ 下的每個 URL 發送到同一條路徑,而無需年份。 此工具會自動為模式規則的確切規則和重寫發出重定向。
如何在 htaccess 中強制使用 HTTPS?
啟用強制HTTPS,生成器會新增一個RewriteCond,用於檢查HTTPS 是否關閉,然後新增一個RewriteRule,該RewriteRule 會使用301 重定向到相同主機和路徑的https 版本。將此規則放在其他重定向之前可確保每個請求都升級到安全連線首先,無需透過額外的跳轉進行連結。
這些重定向在 nginx 上有效嗎?
否。。htaccess 格式特定於 Apache Web 伺服器和模擬它的伺服器,例如 LiteSpeed。 Nginx 不讀取。htaccess 文件,並在伺服器配置中使用自己的重寫和傳回指令,因此您需要將這些規則轉換為 Nginx 語法。在排除忽略的重定向之前,請檢查您的網站運行在哪台伺服器上。
這些重定向會傷害我的 SEO 嗎?
正確使用,重定向保護 SEO 而不是傷害它。 301 保留移動頁面的排名,並將 HTTPS 和 WWW 規範化可防止重複版本分割您的訊號。 風險來自重定向鏈、循環或重定向到不相關的頁面,因此請讓每個規則直接指向最相關的目的地。
一規則可以同時重定向多個網址嗎?
是的。將規則設定為模式模式,並在來源欄位中使用帶有捕獲組的正規表示式,然後在目標欄位中使用 $1、$2 等引用它們。例如,^blog/(。*)$ 重定向到 /articles/$1 將 /blog/下的每個頁面移動到 /articles/下的匹配頁面,並採用單一規則。
我的 URL 資料是私有的嗎?
是的。規則是在您的瀏覽器中使用 JavaScript 產生的。您輸入的任何內容都不會上傳、記錄或存儲,並且一旦頁面加載,該工具就可以在沒有互聯網連接的情況下繼續工作。重定向地圖描述了您的網站's 結構,並且使用客戶端工具,它永遠不會離開您的裝置來組裝文件。
使用 free 建立您的重定向 htaccess 重定向產生器. 它從簡單的清單中編寫 Apache 301 和 302 規則、force-HTTPS 和 www 規範化,順序正確,完全在瀏覽器中,不上傳任何內容。



