Htaccess 產生器只會輸出剛好三道範圍很窄的 Apache 2.4 指令——一條固定主機的 HTTPS 301 轉址、一條可選的 Options -Indexes、以及一個本機 ErrorDocument 路徑——而且整個流程都在 iPhone 上的 Safari 內完成,不需要安裝 App 也不需要桌機工作階段。因為在手機上打開頁面與在筆電上打開,在功能上完全相同:你輸入網域,勾選主機允許的選項,然後複製或下載輸出結果。真正重要的限制不是裝置,而是實際會執行這個檔案的 Apache 伺服器,所以即使是「手機優先」的工作流程,仍然需要伺服器端的備份、預先部署到 staging,以及在上線前進行真正的 HTTP 檢查。本文聚焦在該工作流程中的 iPhone 端:如何在 Safari 開啟產生器、各個輸入欄位的填法、如何把完成的檔案從手機搬到 document root,以及在新指令正式上線前,你仍必須執行的伺服器端檢查。範圍很窄的規則表面,讓整個流程在小螢幕上仍然可以完整審核。

Htaccess 產生器實際上會輸出什麼
這個產生器刻意維持在很窄的範圍。它不會生成合成整份伺服器設定,也不會嘗試偵測伺服器上的 Apache、模組或 AllowOverride。三條指令,絕對不會更多,而且每一條都有可在輸出區塊中先行檢視的明確界線,在你動到 document root 之前就能看到。輸入框預期是一個單一的標準來源(origin),例如 https://www.example.com——不接受帳密、埠號、路徑、查詢字串或片段識別碼——而且結果一律鎖定 HTTPS。從這個來源出發,工具會跳脫主機名稱中的點,建立對固定網域的負向 Host 檢查,並從 Apache 的 mod_rewrite 介紹加入 HTTPS 檢查,然後輸出一道會保留 REQUEST_URI 的 301 RewriteRule。另有兩個可選開關會附加一道 Options -Indexes,以及一個本機 ErrorDocument 路徑。
這種刻意的範圍窄小,重點在於可審核性。只有三個可動元件時,你可以讀完每一行、預測它的效果,並且在 staging 部署出問題時快速還原。這個工具不會連線到你的伺服器、不會執行 apachectl -t、不會讀取 AllowOverride、不會檢查憑證覆蓋範圍,也不會宣稱自己知道哪些 Apache 模組已載入。一個語法上看似合理的檔案,仍可能與主機的政策不相容,這也是為何下面的工作流程會把每一次部署都視為一次伺服器端實驗,而不是一鍵發布。
在 iPhone 上的 Safari 中執行 Htaccess 產生器
完整的工作流程可以在 Safari、iOS 分享選單與一個主機控制台之內完成。所有步驟都不需要桌機工作階段。請直接在手機上依下列順序操作:
- 打開 Safari 並前往 Htaccess 產生器。確認頁面是以標準行動版呈現;不需要任何擴充功能或搭配的 App。
- 點一下標準來源欄位,輸入你精確的目標,例如 https://www.example.com。這個工具會拒絕帳密、埠號、路徑、查詢字串與片段識別碼,所以請先把輸入內容精簡為最純粹的來源,再繼續下一步。
- 只有當你的主機方案允許在 .htaccess 內使用 Options 指令時,才開啟「目錄列表」開關。如果不確定,第一次部署時請先關閉,等確認有 AllowOverride 權限後再回頭處理。
- 只有當你已經在伺服器上建立好目標頁面後,才開啟「本機 404」開關。產生器只接受以斜線開頭的路徑,並會拒絕外部 URL、空白、查詢字串與片段識別碼;該路徑上的檔案必須已存在,否則 Apache 會陷入錯誤迴圈。
- 點 Generate 並完整閱讀輸出區塊。在程式碼區域長按,從 iOS 快速選單中選擇 複製,或使用分享選單把檔案送到「備忘錄」、「檔案」App,或第三方的 SFTP 用戶端。
- 把輸出存成 htaccess.txt 存進「檔案」App,讓檔名可以跨主機控制台流通。
- 透過你的主機控制台上傳到 document root——若控制台是 cPanel,可參考 cPanel 檔案管理員逐步說明——或透過 iPhone 的 SSH/SFTP 用戶端(例如 Termius 或 Prompt)推送上去。
- 在伺服器上把 htaccess.txt 改名為 .htaccess,然後進入 staging 驗證步驟,再開始服務真實流量。
在規則接觸到 Apache 之前先檢視產生的規則
在上傳任何東西之前,請先閱讀工具輸出的三個區塊,並判斷你的主機真正會接受哪些。HTTPS + 主機區塊會啟用 mod_rewrite,檢查請求是否非 HTTPS,或是 Host 標頭與固定標準來源不同,然後輸出一道 301 轉址到固定主機,同時保留 REQUEST_URI。這個轉址是永久的,會告訴瀏覽器與爬蟲這個標準位置取代了舊位置——這對 SEO 整合很有用,但正因為 301 回應會被快取,第一次部署才應該先落到 staging。
HTTPS 條件讀取的是 Apache 的 mod_ssl 狀態。在 TLS 由反向代理或負載平衡器終止,而 Apache 收到的是純 HTTP 的情況下,這條條件原封不動地套用並不合適,因為在那種架構下它會陷入迴圈。只有在你掌控代理路徑並了解偽造風險時,才把規則調整為信任並改寫 proxy 標頭。依據 Apache 自訂錯誤回應說明文件,ErrorDocument 指令接受以斜線開頭的本機 URL 路徑;外部 URL 以及任何本身會觸發錯誤的目標,都可能造成迴圈。
Options -Indexes 這一行是要求 Apache 在沒有 index 資源時不要產生目錄列表。它需要伺服器允許在 .htaccess 中使用 Options 指令。如果 AllowOverride 沒有包含所需的類別,Apache 會回傳 500 錯誤,而不是忽略這一行。因此,最安全的第一次部署,就是只放 HTTPS + 主機區塊,等確認主機接受後,再逐一加上 Options 與 ErrorDocument。
備份並與現有的 .htaccess 合併
現有 CMS 的前端控制器規則、驗證、快取標頭、壓縮或存取限制,可能會依賴它們出現的順序。若直接用產生器的輸出整檔取代,可能會讓網站離線,或繞過預期的路由;所以在伺服器上的第一個動作,是把目前的 .htaccess 下載一份到 iPhone 上的「檔案」App,並存放在 document root 以外的地方。備份就位之後,把新指令貼在 CMS 區塊「上方」而不是「下方」:固定主機的 301 應該在任何應用程式路由之前觸發,這樣這個轉址本身才不會被 WordPress、Drupal 或框架路由改寫。
如果你的 CMS 已經自帶標準化轉址邏輯,請決定哪一份勝出。同時執行兩者會多一跳,而且如果 CMS 規則指向不同的標準主機,每次請求都會與產生器的固定主機規則互相衝突。產生器並不知道你的 CMS,所以合併是手動步驟,上傳前需要仔細 diff。WordPress 安裝特別敏感,因為前端控制器依賴 RewriteEngine 開啟;若把它關閉或移進條件式內部,可能會破壞固定網址。
在 Staging 部署並驗證 Apache 行為
Staging 不是可選的步驟。指向錯誤主機的 301 轉址、主機拒絕的 Options 指令,或是本身會出錯的 404 頁面,在 staging 子網域上復原的成本,遠低於在正式環境 document root 上復原。Staging 上傳完成後,請執行三項檢查:apachectl -t(或主機提供的等效設定驗證工具)、對 HTTP URL 實際執行一次 curl -I 以確認 301 只觸發一次且不會形成迴圈、以及對替代的 Host 標頭執行同一個請求,以確認固定主機規則會抵達標準路徑,並保留原始的查詢字串。
接著直接請求本地 404 路徑,確認 Apache 送回的是你自訂的文件,而不是預設錯誤頁。如果回應是 500,最常見的原因是 AllowOverride:Apache 拒絕了主機未啟用的指令類別,唯一的解法是要嘛移除指令,要嘛請主機放寬 AllowOverride。如果回應是轉址迴圈,幾乎一定是 Apache 看不到的 TLS 代理——請調整條件,或是把標準化轉址搬到看得見原始協定的代理層。
會破壞 iPhone 工作流程規則的邊緣情況
有三個與手機相關的失效模式值得在部署前先標示出來。第一,iOS 剪貼簿會悄悄截斷很長的貼上內容。產生器的輸出很短,但如果你先在「備忘錄」中串接多組規則,再貼回為單一字串後儲存,請檢查末端沒有任何一行被截掉。第二,Safari 的下載管理員會把下載的文字檔以通用的 .txt 副檔名命名;請在伺服器上而不是手機上重新命名,因為 iOS 不會在「檔案」App 顯示以點開頭的檔案。第三,透過行動網路連到主機控制台時,上傳大型檔案可能會逾時。請把檔案先放到 SFTP 用戶端,而不是透過網頁編輯器貼上,這樣傳輸才能續傳。
除了裝置本身,還有兩個伺服器端的邊緣情況在所有使用者中反覆出現。HTTPS 條件在 Cloudflare 或任何會終止 TLS 並轉送純 HTTP 的反向代理後方會陷入迴圈,因為 Apache 一直把請求視為非 HTTPS。產生器會把這種情境標示出來,而不是悄悄改寫它;解法是要嘛新增信任的代理標頭檢查,要嘛把標準化轉址搬到代理層。Options -Indexes 在主機的 AllowOverride 封鎖 Options 時會陷進 500;請移除該行,或向主機詢問 override 類別。
三條指令的快速參考
| 指令區塊 | 作用 | 手機工作流程風險 |
|---|---|---|
| RewriteCond + RewriteRule(HTTPS + 主機) | 將所有請求以 301 轉址到固定的 HTTPS 標準來源,保留 REQUEST_URI | 在 TLS 代理後方會迴圈;快取的 301 會跨部署持續存在 |
| Options -Indexes | 要求 Apache 在沒有 index 資源時不要產生目錄列表 | 若 AllowOverride 不含 Options 會回傳 500 |
| ErrorDocument 404 /path | 為缺失的資源提供本機 404 頁面 | 目標路徑必須存在;產生器會拒絕外部 URL 與查詢字串 |
這個表格整理了每個區塊的貢獻,以及在手機驅動的部署中最可能出現的失效模式。請把每一列當成一個檢查項目,而不是獨立的開關:HTTPS 規則一定要先放,Options 規則只有在主機允許時才放,ErrorDocument 規則只有在目標檔案已存在於伺服器時才放。