若要為 Apache 2.4 站台建立 .htaccess 檔案,請將您的正式主機名稱輸入 Htaccess Generator,僅選取您主機的 AllowOverride 所允許的指令,然後將產生的文字放到網站的文件根目錄中。.htaccess 檔案是一個純文字設定檔,當伺服器的 AllowOverride 允許時,Apache 2.4 會在每次請求時讀取它。產生器最多會建立三個範圍明確的區塊:一個 mod_rewrite 重新導向至固定的 HTTPS 主機名稱、一個選用且會隱藏目錄列表的 Options -Indexes 指令,以及一個選用的 ErrorDocument 規則,將找不到的頁面回應指向站台內部的某個本地路徑。它不會嘗試合成完整的伺服器設定,因此輸出的內容必須逐行檢視、複製並合併到您實際掌控的站台文件根目錄中。最終結果可稽核、針對主機量身打造,且小到可以與網站根目錄的其他檔案一同納入版本控管。

.htaccess 檔案在 Apache 2.4 中的作用
.htaccess 檔案是一個純文字設定檔,只要父層設定中 AllowOverride 允許使用相關指令,Apache 2.4 在服務來自該檔案所在目錄的請求時就會讀取它。由於每次請求都會進行解析,您加入的每一行都會帶來些微但實際的效能成本,這也是生產環境指南建議保持檔案精簡的原因之一。該檔案預設位於文件根目錄,並會沿著子目錄向下繼承,因此根目錄中將非 HTTPS 流量重新導向的規則會涵蓋整個站台,除非更深層的 .htaccess 將其覆寫。以目錄為單位的 rewrite 內容也與虛擬主機設定行為不同:在目錄中運作良好的規則,移到主要伺服器設定中可能會出狀況,反之亦然。若您能掌控主要的 Apache 設定,官方文件通常會建議改用較簡單的虛擬主機 Redirect 指令來處理正式的 HTTP 對 HTTPS 轉換。
為何範圍明確、可稽核的規則勝過手寫檔案
大多數涉及 .htaccess 檔案的生產環境故障,都來自於多年累積的規則、引用錯誤主機名稱的剪貼片段,或是主機不允許而 Apache 因此回傳 500 錯誤的指令。一個聚焦的產生器透過將規則集限制在三項已記錄的需求來縮減這片攻擊面:將每個請求重新導向至單一正式 HTTPS 主機名稱、隱藏目錄列表,以及將找不到的頁面指向單一本地錯誤文件。每條規則都有已知的失敗模式、已知的需求,以及在 Apache 文件中可查找的對應位置。您能在部署前朗讀並理解檔案內容,這比大多數手寫的 .htaccess 檔案能做到的還多。
產生器可輸出的三個區塊在其相依性上有所不同,透過快速比較即可清楚呈現:
| 區塊 | 用途 | Apache 需求 | 常見失敗 |
|---|---|---|---|
| mod_rewrite 重新導向 | 將 HTTP 及替代主機的請求送至單一固定 HTTPS 主機 | 已載入 mod_rewrite;HTTPS 狀態可透過 mod_ssl 讓 Apache 看到 | 301 導向錯誤的主機,或在 TLS 終止代理伺服器後方形成重新導向迴圈 |
| Options -Indexes | 在沒有索引檔時隱藏自動目錄列表 | AllowOverride 允許 Options 指令 | 若主機不允許在 .htaccess 中使用 Options,會出現 HTTP 500 |
| ErrorDocument 404 | 為找不到的資源提供單一本地頁面 | 本地路徑存在且本身不會發生錯誤 | 404 頁面反而回傳 404,形成迴圈並使錯誤日誌膨脹 |
產生器接受及拒絕的輸入內容
主機名稱欄位僅接受一個公開網域來源,格式為 https://www.example.com。它會拒絕憑證、IP 位址、連接埠、路徑、查詢字串與片段,因為這些值都無法安全地提升為正式重新導向的目標。您輸入的主機名稱會成為 301 重新導向的目的地,以及 Apache 在 Host 標頭條件中要比對的值,其中的句點已進行跳脫,使該規則的行為為字面比對,而非正則表達式樣式。使用固定目的地可避免從不可信賴的 Host 值建構外部重新導向,這對請求詐騙與快取中毒的邊界情況提供了雖小但實質的防禦。
目錄列表切換僅在被選取時才會輸出 Options -Indexes,而本地 404 路徑欄位僅在您提供以斜線開頭且不含空白、查詢字串或外部 URL 的字串時,才會輸出 ErrorDocument 404 /your-path。邊界測試會拒絕憑證、IP 位址、非來源 URL 及外部錯誤目標,因此任何通過表單的輸入,都已確定是產生器所能產生之三條規則的有效設定輸入。產生器所組成的檔案預設會放置於網站文件根目錄,並假設 mod_rewrite 可用;產生器並不會連線至伺服器、偵測 Apache、檢查已啟用的模組、讀取 AllowOverride、驗證憑證涵蓋範圍,或代替您執行 apachectl -t。
如何使用 Htaccess Generator 建立 .htaccess 檔案
- 開啟 Htaccess Generator 並輸入精確的正式站台來源,例如 https://www.example.com。請使用您希望每位訪客在重新導向後到達的主機名稱,而非僅在單一測試瀏覽器網址列中目前所輸入的主機名稱。
- 僅在您的主機允許 AllowOverride 包含 Options 時,才啟用目錄列表選項;僅在您已建立路徑所指向的本地檔案時,才啟用本地 404 路徑。這兩個選項都是選用的,應反映您實際的託管環境所允許的內容。
- 逐行檢視產生的規則。確認 RewriteRule 目標是您的正式來源、Host 條件列出相同主機名稱且句點已跳脫,且任何選用行皆符合您所述的意圖。重新導向區塊應啟用 mod_rewrite,檢查 Apache 是否將請求視為非 HTTPS 或 Host 標頭與固定正式網域不同,然後發出一次 301 重新導向至固定主機,同時保留 REQUEST_URI。
- 複製輸出或下載檔案,並以純文字編輯器開啟。請將文件根目錄中既有的 .htaccess 另存一份備份,以便發生問題時可還原,因為在替換任何內容前先備份既有的 .htaccess,是最可靠的一條還原途徑。
- 將新指令與任何既有的 CMS front-controller 規則、驗證需求、快取標頭或存取限制合併。順序很重要:將重新導向置於上方,使其在驗證區塊之前執行;將 ErrorDocument 規則放在不會被 CMS 錯誤處理覆寫的位置。
- 將合併後的檔案上傳至盡可能貼近正式環境的預備環境。透過 HTTP、HTTPS,以及若 DNS 有暴露則透過替代主機請求首頁,並請求一個不存在的 URL。每個回應皆應抵達正式 HTTPS 頁面或本地 404 文件,而不會產生迴圈。
- 使用主機提供的伺服器端工具(通常是 apachectl -t 或控制台中對應的功能)驗證 Apache 本身的設定,然後於低流量時段將檔案推送至正式環境,以便任何 500 錯誤都能迅速還原。正式環境的正確性有賴於伺服器端設定驗證與實際的 HTTP 檢查;語法上看似合理的檔案,仍可能與託管政策不相容。
與既有 CMS 或驗證指令合併
.htaccess 檔案很少單獨存在。WordPress、Joomla、Drupal、自訂 PHP 框架及驗證層都會留下各自的規則,而這些規則的順序,比您記住它們的先後次序更為關鍵。既有的 CMS front-controller 規則、驗證、快取標頭、壓縮或存取限制,可能都依賴特定的順序,因此唯有在理解這些規則後再行合併;盲目地替換整個檔案,可能會讓站台離線或繞過預期的路由。請將產生器的重新導向置於最上方,使其在任何 front-controller 規則改寫請求之前執行。ErrorDocument 規則應放在您打算保留的任何 CMS 錯誤處理規則之後,以及依賴穩定回應代碼的壓縮或快取指令之前。
在每次推送至正式環境前,於預備環境中測試合併後的檔案,並重新執行初次驗證時所用過的相同 HTTP、HTTPS、替代主機及找不到頁面的請求。若 CMS 預期特定的錯誤代碼路徑,請確認您的本地 404 頁面回傳的是 404 而非 200,因為對找不到的頁面回傳 200,會被搜尋引擎視為軟 404,並悄悄地稀釋檢索效率。如需更深入了解 CMS 友善的 .htaccess 檔案及新增指令的順序,請參閱關於為 HTTPS 與自訂 404 頁面建立安全的 .htaccess 檔案的實務逐步說明。
預備環境檢查、代理伺服器陷阱與 500 錯誤還原
語法上有效的檔案,仍可能與託管政策不相容。產生器所輸出的 HTTPS 條件會讀取 Apache 的 mod_ssl 狀態,這表示當 TLS 在反向代理伺服器或負載平衡器終止、Apache 接收到純 HTTP 時,該條件並不適合直接使用。在此架構下,該條件可能產生迴圈,使訪客在代理伺服器與 Apache 之間來回切換而無法離開。僅在您掌控代理路徑並了解偽造風險時,才將規則調整為可信賴且被覆寫的代理標頭,或將正式重新導向完全移至代理伺服器或虛擬主機設定中。在 Cloudflare 或其他 TLS 代理後方,最安全的做法通常是從 .htaccess 檔案中移除 HTTPS 檢測,讓邊緣層負責處理通訊協定升級。
若任何請求產生迴圈或回傳 500,請還原合併前所建立的備份,並查看 Apache 錯誤日誌中關於不允許的指令或缺少模組的紀錄。快取的 301 回應可能會在瀏覽器與中介快取中持續很長一段時間,這正是預備環境存在的其中一個原因:您原本打算暫時測試的 301,對回訪的訪客而言可能會形同永久生效。產生器無法偵測 Apache、模組、AllowOverride、憑證涵蓋範圍或代理拓樸,因此正式環境的正確性,取決於您在 Apache 實際服務請求之處所執行的檢查。請將Apache 的 mod_rewrite 文件以及自訂錯誤回應指南視為產生器所輸出指令的權威來源。
Translating to Nginx when Apache isn't the front end
If your production front end is Nginx rather than Apache, the .htaccess file the generator produces will not be parsed by Nginx at all. Apache-specific directives such as RewriteRule, Options and ErrorDocument have no direct counterpart in the Nginx configuration language, so each line needs to be rewritten as one or more Nginx directives inside the server block. That translation is mechanical for some rules and judgement-based for others, especially around the RewriteCond logic that checks the Host header and the HTTPS state. The htaccess to Nginx converter in the same tool family is built for that exact translation, surfacing every condition or unsupported rule instead of guessing. For a wider walkthrough of the translation process and the rules that have to be re-implemented by hand, see the guide on converting Apache .htaccess to Nginx rules without guesswork.