跳至內容
伺服器與 .htaccess

WordPress 預設 .htaccess 檔案:程式碼與還原方法

WordPress 為固定連結寫入的確切預設 .htaccess 程式碼、每一行的作用,以及文章出現 404 但首頁正常時如何還原這個檔案。

發布於

WordPress 預設的 .htaccess 檔案,是這套軟體寫入你網站根目錄 .htaccess 的一小段 RewriteEngine 區塊,目的是讓 /2026/10/文章名稱/ 這樣的固定連結正常運作,而不是出現 404。它看起來是這樣:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

這些規則來自 WordPress 用來產生該區塊的程式碼,並且與 WordPress 官方的 .htaccess 指南一致。WordPress 還會在 # BEGIN WordPress 之後緊接著寫入三行註解,提醒標記之間的修改會被覆寫。這些註解不影響規則的運作。

安裝在子資料夾時,WordPress 會把子資料夾路徑同時寫入 RewriteBase 和最後一條規則,例如 RewriteBase /blog/ 和 RewriteRule . /blog/index.php [L]。多站台網路使用不同的區塊,WordPress 也不會為它們自動寫入這個檔案。

重點摘要

  • 在 Apache 與 LiteSpeed 上,只要有寫入權限並啟用了美化固定連結,WordPress 就會產生這個區塊。開啟設定 > 固定連結就夠了。
  • 如果檔案缺失或損毀,固定連結會回傳 404,而首頁仍能載入,因為首頁不需要重寫規則。
  • 你或外掛新增的任何內容都要放在 # BEGIN WordPress 上方,絕不要放在標記之內。WordPress 更新檔案時會取代兩個標記之間的全部內容。
Apache 的終端機輸出:沒有 .htaccess 檔案時,首頁回傳 200,文章網址回傳 404;加上預設區塊後,兩者都回傳 200
Apache 2.4.58 的真實回應。沒有這個檔案時,首頁能開啟,文章網址回傳 404。加上預設區塊後,兩者都回傳 200。我們用一個只有一行的測試 index.php 代替了 WordPress。

每一行在做什麼

RewriteEngine On 為目前目錄開啟 Apache 的 mod_rewrite 模組;沒有它,下面的重寫規則都不起作用。

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 不更動 URL(- 就是這個意思),並把請求的 Authorization 標頭複製到一個伺服器變數中。WordPress 讀取該變數,以取得標頭中送出的使用者名稱和密碼,例如應用程式密碼。

RewriteBase / 設定 Apache 用於重寫後 URL 的路徑前綴。WordPress 會依網站所在位置來設定它,所以安裝在子資料夾時會得到 RewriteBase /blog/。

RewriteRule ^index\.php$ - [L] 是一道保護:如果請求已經是 index.php,就停止重寫,讓請求原樣通過。

兩行 RewriteCond 才是真正的邏輯。%{REQUEST_FILENAME} !-f 和 !-d 在問:「這個請求既不對應真實檔案,也不對應真實目錄嗎?」兩者都成立,最後一條規則才會觸發,所以真實的圖片、CSS 檔案或上傳的 PDF 會被直接提供,不經過 WordPress 的路由。

RewriteRule . /index.php [L] 讓固定連結得以運作。通過這兩個條件的所有請求都會被送到 index.php,再由 WordPress 判斷該 URL 對應哪篇文章、哪個頁面或哪個彙整。

WordPress 什麼時候會重新建立這個檔案,什麼時候不會

每次載入設定 > 固定連結畫面時,WordPress 都會清除並重建重寫規則,所以開啟它就夠了,不必點擊儲存設定。如果 .htaccess 缺失,只要資料夾可寫入並啟用了美化固定連結,WordPress 就會建立它。如果檔案已存在且可寫入,WordPress 會取代標記之間的區塊。

以下情況這樣做解決不了問題:

  • 檔案或其所在資料夾對執行 PHP 的使用者不可寫入。 畫面會顯示錯誤,說明 .htaccess 檔案不可寫入,並提供要貼上的規則。在某些主機上,執行 PHP 的系統使用者與 FTP 上傳檔案的擁有者不同,所以在 FTP 用戶端裡看起來沒問題的權限,仍可能阻止 WordPress 寫入。
  • 你用的是 nginx。 WordPress 的 nginx 指南指出,nginx 沒有像 .htaccess 這樣的目錄層級設定檔,WordPress 也無法變更伺服器設定。對應的路由是伺服器設定中的 try_files 指令,必須由管理員編輯。
  • Apache 主設定中,你網站目錄的 AllowOverride 設為 None。 Apache 文件寫道:「This means .htaccess files are completely ignored unless you explicitly enable them for a directory.」(意思是,除非你為某個目錄明確啟用,否則 .htaccess 檔案會被完全忽略。)WordPress 即使寫出完美的檔案,也不會有任何效果。重寫規則需要 AllowOverride FileInfo(或 All),這可能需要你的主機商來變更。
  • 你的固定連結設為「預設」(Plain)。 這種 URL 不需要重寫規則,所以 WordPress 不會為它們建立這個檔案。

如何手動還原它

如果文章和頁面出現 404,而首頁仍然正常,首先檢查 .htaccess 是否缺失或損毀。分兩步解決。

1. 先試一鍵修復。 在 wp-admin 中開啟設定 > 固定連結,不做任何變更,點擊儲存設定。如果 WordPress 能寫入檔案,這樣就會重新建立它。如果不能,畫面會顯示錯誤和你需要的規則。

2. 如果沒有解決,就手動建立檔案。 透過 FTP/SFTP 或主機的檔案管理員連線,進入網站根目錄,通常就是包含 wp-admin 的資料夾。檢查 .htaccess 是否存在。它的檔名以點開頭,有些檔案管理員預設會隱藏它;請開啟「顯示隱藏檔案」。

  • 如果缺失,新建一個檔案,名稱必須正好是 .htaccess(沒有 .txt,點之前也沒有任何內容)。
  • 貼上 WordPress 顯示的規則,或本指南開頭的預設區塊。安裝在子資料夾時,要相應修改 RewriteBase 和最後一條規則。
  • 儲存,然後重新載入一篇文章的固定連結,確認它能正常運作。

如果仍然出現 404,.htaccess 可能被忽略了。請向主機商確認 AllowOverride,因為它關閉時,Apache 連正確的檔案也會忽略。

你自己的規則與 WordPress 區塊

外掛或手動編輯可能會新增自己的規則,例如重新導向、防盜連或快取標頭。請把它們放在 WordPress 區塊之外的上方,這樣它們會先於區塊中攔截所有請求的規則執行:

# 你或外掛新增的規則:放在 WordPress 標記上方
<FilesMatch "\.(jpg|jpeg|png|gif)$">
    # 範例:防盜連、快取規則等
</FilesMatch>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

放在 # BEGIN WordPress 與 # END WordPress 之間的任何內容,都會在 WordPress 下次更新檔案時遺失,而載入固定連結畫面就足以觸發更新。標記之前和之後的行會被保留。關於重新導向,請參閱正確撰寫 WordPress .htaccess 重新導向規則,了解它們該放在哪裡以及如何避免迴圈。

編輯檔案後立即出現 500 Internal Server Error,表示問題出在你剛改的內容上。Apache 文件指出,錯誤記錄很可能會寫明不被允許的指令或語法錯誤。從舊教學複製的規則可能導致這種情況:除非載入了 mod_access_compat,否則 Order 在 Apache 2.4 上是無效指令。先復原修改讓網站恢復,再查看錯誤記錄。

預設區塊之外

預設區塊只處理固定連結路由和 Authorization 標頭。要收緊對敏感檔案的存取,例如禁止在 /uploads 中執行 PHP,或拒絕對 wp-config.php 的直接請求,請參閱真正有用的 WordPress .htaccess 安全規則。如果固定連結因為其他原因回傳 404,例如固定連結結構錯誤、快取層提供舊規則或多站台子目錄衝突,WordPress 固定連結無法運作會逐一說明其他原因。

常見問題

WordPress 預設的 .htaccess 檔案是什麼? 它是 WordPress 寫入網站根目錄 .htaccess 檔案中、位於 # BEGIN WordPress 與 # END WordPress 之間的 RewriteEngine 區塊。它把 Authorization 標頭傳遞給 PHP,並把所有不對應真實檔案或資料夾的請求送到 index.php。

WordPress 預設 .htaccess 的確切程式碼是什麼? RewriteEngine On、一條把 Authorization 標頭傳遞給 PHP 的規則、RewriteBase /、一條讓 index.php 直接通過的規則、兩個檢查請求不是真實檔案或資料夾的條件,以及最後一條把其餘所有請求送到 index.php 的規則。完整區塊在本指南開頭。

為什麼除了首頁,我的所有文章都顯示 404? Apache 上 .htaccess 檔案缺失或損毀就會出現這種情況。伺服器不需要重寫規則也能找到首頁。其他固定連結都需要這些規則才能到達 index.php,所以沒有規則時,Apache 會去找一個不存在的檔案並回傳 404。

WordPress 會自動重新建立 .htaccess 嗎? 會,前提是在具備 mod_rewrite 的 Apache 或 LiteSpeed 上,已啟用美化固定連結,且 WordPress 能夠寫入。開啟設定 > 固定連結就足以觸發。檔案缺失時需要資料夾可寫入,檔案已存在時需要檔案本身可寫入。否則畫面會顯示錯誤,並提供需要手動貼上的規則。

為什麼 nginx 沒有 WordPress 的 .htaccess 檔案? nginx 沒有像 Apache 的 .htaccess 那樣的目錄層級設定檔。同樣的路由要寫成 nginx 伺服器設定中的 try_files 規則,必須由管理員編輯,因為 WordPress 無法變更它。

儲存固定連結之後,我的 .htaccess 為什麼壞掉了? 請檢查是否有自訂規則被放在 # BEGIN WordPress 與 # END WordPress 標記之內。WordPress 更新檔案時會取代兩個標記之間的全部內容,所以那條規則會遺失。請把自訂規則放在標記上方。

參考來源


使用免費的 WordPress .htaccess 產生器重建一份乾淨、正確的 .htaccess,其中包含預設固定連結區塊,以及你真正需要的安全或重新導向規則。

FAQ

常見問題

WordPress 預設的 .htaccess 檔案是什麼?

它是 WordPress 寫入網站根目錄 .htaccess 檔案中、位於 # BEGIN WordPress 與 # END WordPress 之間的 RewriteEngine 區塊。它把 Authorization 標頭傳遞給 PHP,並把所有不對應真實檔案或資料夾的請求送到 index.php。

WordPress 預設 .htaccess 的確切程式碼是什麼?

RewriteEngine On、一條把 Authorization 標頭傳遞給 PHP 的規則、RewriteBase /、一條讓 index.php 直接通過的規則、兩個檢查請求不是真實檔案或資料夾的條件,以及最後一條把其餘所有請求送到 index.php 的規則。完整區塊在本指南開頭。

為什麼除了首頁,我的所有文章都顯示 404?

Apache 上 .htaccess 檔案缺失或損毀就會出現這種情況。伺服器不需要重寫規則也能找到首頁。其他固定連結都需要這些規則才能到達 index.php,所以沒有規則時,Apache 會去找一個不存在的檔案並回傳 404。

WordPress 會自動重新建立 .htaccess 嗎?

會,前提是在具備 mod_rewrite 的 Apache 或 LiteSpeed 上,已啟用美化固定連結,且 WordPress 能夠寫入。開啟設定 > 固定連結就足以觸發。檔案缺失時需要資料夾可寫入,檔案已存在時需要檔案本身可寫入。否則畫面會顯示錯誤,並提供需要手動貼上的規則。

為什麼 nginx 沒有 WordPress 的 .htaccess 檔案?

nginx 沒有像 Apache 的 .htaccess 那樣的目錄層級設定檔。同樣的路由要寫成 nginx 伺服器設定中的 try_files 規則,必須由管理員編輯,因為 WordPress 無法變更它。

儲存固定連結之後,我的 .htaccess 為什麼壞掉了?

請檢查是否有自訂規則被放在 # BEGIN WordPress 與 # END WordPress 標記之內。WordPress 更新檔案時會取代兩個標記之間的全部內容,所以那條規則會遺失。請把自訂規則放在標記上方。