WordPress .htaccess 設定完整指南,固定連結到安全強化一次搞定

.htaccess 檔案常常被忽略,直到網站出問題才想起它的存在。看似不起眼的文字檔,其實決定了 WordPress 的固定連結能不能運作、使用者怎麼存取你的網站,甚至能擋下某些常見的安全風險。

什麼是 .htaccess,為什麼 WordPress 需要它

.htaccess 是 Apache 伺服器的設定檔案,名稱的點開頭表示這是隱藏檔。它的角色是告訴伺服器怎麼處理進來的請求,像是把漂亮的 URL 轉成真正的 PHP 檔案、把某個資料夾加上密碼保護、把 HTTP 強制轉到 HTTPS,這類指令都寫在裡面。

WordPress 靠它實現固定連結功能。舉例,當訪客點進 example.com/wordpress-htaccess 這個連結,伺服器實際上沒有一個真的資料夾或檔案叫這個名字。背後的 URL 重寫規則會把這個請求導向 WordPress 的 index.php,再由 WordPress 判斷該顯示哪篇文章。沒有這份檔案,固定連結會失效,訪客只能用預設的 ?p=123 這種醜陋網址。

常見壞掉情況與恢復方法

被主機商覆蓋或清除

有時候主機商進行系統更新或安全掃描,會意外刪除或改寫 .htaccess。偶爾某些主機管理面板的功能(像是一鍵裝 WordPress)也會重置這份檔案。表現出來是突然所有固定連結都 404,或者文章頁面顯示 404 但首頁正常。

恢復方法最簡單,進 WordPress 後台「設定 > 永久連結」,把目前連結結構保存一次。WordPress 會自動重新產生標準內容寫回伺服器。如果後台沒有寫入權限(很少見但會發生),你得用 FTP 手動新增或編輯。

權限設定錯誤

.htaccess 檔案需要可讀,但 WordPress 的自動更新或某些外掛也需要寫入權限。如果權限設太緊(例如 444),系統無法修改它,等於一個固定的、可能已經過時的規則。

檢查方法用 FTP 登入,找到 .htaccess 檔案右鍵「檔案權限」或「Properties」,確認是 644(可讀寫)。如果是 444 或其他限制性設定,改回 644。大多數主機預設就是對的,但偶爾碰到強化安全的主機會故意鎖住。

Nginx 主機根本沒有 .htaccess

這個坑不少人踩。Nginx 是比 Apache 更輕量、更快的伺服器軟體,但它不認這類檔案。如果你的主機用 Nginx(常見於託管型 WordPress 主機或現代雲端主機),這份檔案放在那裡形同廢紙。

症狀是即使檔案內容看起來正確,固定連結還是壞的。你得問主機商 Nginx 的設定檔在哪(通常是 server block 或 location 區塊),然後把 URL 重寫規則改寫成 Nginx 語法,或者乾脆用外掛(例如 Yoast SEO 有內建 Nginx 相容的替代設定)。

標準應該長什麼樣

WordPress 安裝完正常狀態下,內容大致像這樣:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

這段指令的邏輯是,開啟 URL 重寫、如果請求的檔案或資料夾不存在,就把它轉向 index.php。簡潔而直接。如果你手動編輯過檔案,確認 BEGIN 和 END 的註解還在(WordPress 自動更新時會以這兩行作為邊界),避免被意外覆蓋。

手動設定,常見的防護與重設定

除了基本的 URL 重寫,這份檔案還能做幾件實用的事。以下是站長最常加的規則。

禁止直接存取 wp-config.php

wp-config.php 是 WordPress 最敏感的檔案,裡面有資料庫密碼。要是駭客掃到它,遊戲就結束。加這段規則:

<Files wp-config.php>
Order allow,deny
Deny from all
</Files>

放在 WordPress 區塊外面,這樣即使 WordPress 自動更新也不會清除它。

限制特定 IP 存取後台

<FilesMatch "^wp-login.php$">
Order allow,deny
Deny from all
Allow from 111.222.333.444
</FilesMatch>

把 111.222.333.444 改成你自己或團隊人員的真實 IP,只有這個 IP 才能進後台登入頁。其他人直接被擋,連暴力破解的機會都沒有。但要留意,遠端工作、用行動網路或常換地點的話,白名單會很煩人。

強制 HTTPS 轉址

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

所有 HTTP 請求自動升級到 HTTPS,301 永久轉址。近年 SSL 憑證已經很便宜甚至免費(Let’s Encrypt),建議所有網站都該上 HTTPS。

禁止特定檔案類型被執行

<FilesMatch ".(exe|zip|tar|gz|rar)$">
Order allow,deny
Deny from all
</FilesMatch>

把某些危險副檔名列入黑名單,就算被上傳也無法執行。不過這種防護不如用外掛或主機層防火牆來得穩定,因為攻擊者很聰明,會改檔名或用不同上傳方式。

Nginx 沒有 .htaccess,該怎麼辦

如果你用的是 Nginx(或託管型 WordPress 服務如 Kinsta、WP Engine),後台改永久連結後發現不動作,十之八九是因為伺服器根本看不懂。

解法有三條。一是直接問主機商讓他們配置 Nginx 的 server block。如果他們肯幫手,就由他們搞定。二是改用外掛,像 Yoast SEO 或 Rank Math 會在檢測到 Nginx 時給出替代設定或自動相容。三是如果主機有提供管理面板(例如 cPanel 的 Nginx)可能有圖形化設定選項,不需動手寫程式碼。

大多時候,管理式 WordPress 主機已經在後台幫你設好了,所以固定連結開箱即用,根本不用自己碰。反倒是自架在便宜共享主機上的 WordPress,這份檔案是必須親自搞定的玩意兒。

根據你的託管環境,花點時間確認伺服器到底用 Apache 還是 Nginx,再採取對應的解決方案,比起盲目試錯省事得多。.htaccess 本身不複雜,但它在 WordPress 生態中扮演的角色容易被遺忘,直到出問題才後悔。

相關文章
標籤: .htaccess, 固定連結, HTTPS 轉址, WordPress 安全, Apache