一份可以正常運作的 .htaccess 檔案,幾乎不可能透過一般的瀏覽器請求存取到,因為 Apache 會把它放在文件根目錄中,並當成隱藏的設定檔案來處理,而不是可下載的內容。如果您想為自己管理的網站取得一份,可靠的做法,是先從嚴格的輸入條件,產生一份範圍狹窄、可稽核的 Apache 2.4 檔案,再自己把它上傳到文件根目錄。Htaccess 產生器產生的正是這種檔案:它拿您的正規網域,建立一條固定主機的 301 HTTPS 重新導向規則、並保留原始的 REQUEST_URI,同時可選擇加上用於目錄列表的 Options -Indexes,以及用於處理找不到頁面的本機 ErrorDocument 路徑。每一行輸出,在上傳之前都可以逐行稽核;每一項輸入,都會依照不含憑證的公開來源規則驗證;而這個工具不會連線到您的伺服器、不會檢查已啟用的模組,也不會讀取 AllowOverride。這種狹窄的範圍正是重點所在,因為規則面越小,在這份檔案與既有的 CMS 設定合併時,破壞路由、驗證機制或快取標頭的方式就越少。

how to get htaccess file from website
如何從網站取得 htaccess 檔案

為什麼正式上線的網站幾乎不會暴露它的 .htaccess

Apache 把 .htaccess 當成逐目錄的設定檔案,而不是一般的內容。伺服器預設會封鎖對任何以句點開頭的檔案的直接存取,而大多數主機控制面板,也會在檔案管理員中隱藏這類點檔案。即使檔案確實存在,您也無法透過在瀏覽器中輸入網址來取得它,因為這個請求,會被改寫、拒絕,或直接路由到另一個處理程序。實際上,這代表從一個網站「取得」這份檔案,其實是兩件事:先產生一份含有您所需指令的檔案,再把它放到 Apache 會讀取的位置。

這件工作最安全的做法,是刻意產生一份範圍狹窄的設定,而不是從各種教學文章隨意複製規則。接受自由格式文字的產生器,往往會產生龐雜的檔案,裡面的指令會與 CMS 的前端控制器、防盜連規則、gzip 區塊或基本驗證機制互相衝突。一個只處理三項常見需求——HTTPS 正規化、抑制目錄列表,以及本機自訂 404——的專注型工具,能讓規則範圍小到足以在上傳前逐行稽核。

一份範圍狹窄、可稽核的 .htaccess 實際上包含什麼

Htaccess 產生器的輸出結果,是從嚴格且經過驗證的輸入建立而成。正規來源必須是像 https://www.example.com這樣的公開網域,不含憑證、連接埠、路徑、查詢字串或片段。這個工具會從這單一個值,組成一條固定主機的重新導向規則,在正規表達式中對主機名稱的句點做逸出處理,並且永遠產生一個 HTTPS 目的地,因此即使輸入的來源是 HTTP,也會被正規化成一個安全的目的地。可選的切換選項,還會再加上兩條指令:Options -Indexes 用於抑制目錄列表,以及一個本機的 ErrorDocument 路徑,用於自訂 404 回應。

選取的輸入 產生的指令 用途
正規來源(必填) RewriteEngine On plus RewriteCond %{HTTPS} !=on [OR] RewriteCond %{HTTP_HOST} !^www\.example\.com$ and RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L] 301 重新導向到單一固定的 HTTPS 主機,同時保留請求路徑與查詢字串
停用目錄列表 Options -Indexes 在沒有索引檔案時,阻止 Apache 產生自動列表
本機自訂 404 路徑 ErrorDocument 404 /custom-404.html 對於找不到頁面的請求,回傳同一個網站內的本機檔案

這個產生器從不嘗試合成一份完整的伺服器設定。它假設這份檔案會放在文件根目錄,並且假設 mod_rewrite 是可用的,這是共享主機與代管主機常見的 Apache 2.4 設定方式。因為目的地主機名稱是寫死在規則中的,這個重新導向並不依賴不可信任的 Host 標頭,這樣可以避免當一條規則把請求原樣反射給訪客時,可能悄悄出現的開放重新導向行為。

用 Htaccess 產生器產生檔案

產生一份可用的 .htaccess 的流程很短,但每一步都存在,是因為下一步依賴著它。跳過某一步,就有可能造成一次難以回復的服務中斷,因為快取下來的 301 回應,即使在檔案已經修正之後,仍然可能在瀏覽器中留存很長一段時間。

  1. 輸入確切的正規網站來源,例如 https://www.example.com,不含結尾斜線、憑證、連接埠、路徑或查詢字串。這個輸入欄位,會拒絕任何不是乾淨公開網域來源的內容。
  2. 只選取您主機環境實際允許的可選指令。只有在您的主機允許在 .htaccess 中使用 Options 指令時,才啟用目錄列表抑制功能。只有在您已經在指定路徑建立好目標檔案,並確認它本身不會觸發錯誤迴圈時,才啟用本機自訂 404。
  3. 逐行檢視產生出來的規則。確認固定的主機名稱,與訪客應該看到的內容相符,確認 HTTPS 條件讀取的是 Apache 的 mod_ssl 狀態,並確認 ErrorDocument 路徑以單一斜線開頭,且指向一個真實存在的本機檔案。
  4. 複製或下載輸出結果,並立即備份伺服器上既有的 .htaccess。既有的 CMS 前端控制器規則、基本驗證區塊、快取標頭、壓縮規則與存取限制,經常依賴特定的順序,盲目地整個取代,可能會讓網站離線。
  5. 把新的指令合併進既有的檔案中,而不是整個覆寫。把重新導向區塊放在接近頂端的位置,讓它在任何 CMS 路由之前先生效,接著再把可選的 Options 與 ErrorDocument 這兩行,附加在不會與後續規則衝突的位置。

對於想更深入了解這份檔案中 HTTPS 那一半內容的讀者,建立用於 HTTPS 重新導向的 htaccess 檔案 這篇指南,更詳細地說明了重新導向的運作機制,包括決定這條規則何時生效的條件。

安全地部署並測試輸出結果

即使一份檔案在語法上看起來沒問題,仍然可能與主機的政策不相容,這正是預備環境存在的原因。這個產生器不會執行 apachectl -t,不會偵測已載入的模組清單,也不會檢查 AllowOverride,因此正式環境的正確性,是您需要親自在伺服器上驗證的事。在檔案上線之前,請分別用 HTTP 請求正規的 HTTPS 網址、用 HTTPS 請求正規網址、發出一個替代主機的請求,以及一個刻意不存在、應該觸發自訂 404 的路徑。這幾項檢查,各自涵蓋了產生出來的規則集中不同的分支,其中任何一項失敗,都指向一項您需要重新檢視的特定輸入。

如果任何測試出現迴圈,或回傳 500 錯誤,請立即還原備份。根據 Apache 的 mod_rewrite 簡介,逐目錄的重寫情境,與虛擬主機設定的行為並不相同,而官方文件經常建議,在您擁有那種層級的存取權限時,針對正規的 HTTP 轉 HTTPS 處理,改用更簡單的 Redirect 指令,寫在主要的 Apache 設定中。這個產生器的逐目錄風格,適合共享主機;虛擬主機風格,則適合您能控制伺服器設定的情況。把這兩種情境混在一起,是常見的混淆來源。

值得事先規劃的邊緣案例

有三種架構,會以可預期的方式破壞產生出來的規則,事先知道這些狀況,能省下一次除錯過程。第一種,是在反向代理處終止 TLS 的架構:如果 Apache 位於 Cloudflare 或負載平衡器之後,只看得到一般 HTTP,%{HTTPS} 這個條件就會永遠讀成關閉狀態,重新導向就可能形成迴圈。第二種,是 AllowOverride 政策排除了 OptionsFileInfo:在這種情況下,Options -IndexesErrorDocument 指令,可能在重寫規則生效之前,就先觸發 500 錯誤。第三種,是既有的 CMS .htaccess 完全掌控路由的情況:取代它時,會把重新導向區塊合併到前端控制器上方,但 RewriteEngine On 這類指令的順序仍然必須遵守,重複啟動這個引擎,可能產生難以察覺的錯誤。

產生器內建的邊界測試,能提早抓到許多這類問題。含憑證的網址、IP 位址、非來源格式的輸入,以及外部的錯誤目標,全都會在產生任何輸出之前就被拒絕,因此您下載到的檔案,在語法上永遠與這個工具所宣稱的一致。這個工具無法抓到的,是伺服器端的政策,這正是為什麼預備環境這一步不能省略。請把這個產生器當成一種能快速產生可稽核檔案的方式,並把預備環境當成這份檔案贏得晉升到正式環境資格的地方。

想更深入了解,請參閱 htaccess 轉 nginx 速查表:規則、限制與警告