在 Apache Web 伺服器環境中,.htaccess(全名為 Hypertext Access,超文字訪問) 是最具威力的目錄級設定檔。它允許網站管理者在無需直接修改伺服器全域核心設定檔(如 httpd.conf)的情況下,針對特定資料夾及其所有子目錄自訂訪問規則、路徑重新導向與安全存取權限。

檔案名稱開頭的「點(.)」符號,代表它在 Unix/Linux 系統中屬於隱藏檔案。任何一個運行在 Apache 上的 WordPress 網站,都必須仰賴一份正確且健全的 .htaccess 才能讓固定網址(Permalinks)正常解析。

然而,除了最基礎的頁面轉址,一份優秀的 .htaccess 更是強化網站資安防線、抵禦惡意探測、以及開啟瀏覽器靜態快取以大幅提升 Google PageSpeed 分數的關鍵秘密武器。本文將常用且強大的設定範例彙整如下,供廣大 WordPress 站長與運維人員直接參考取用。


一、WordPress 官方標準核心重寫規則(mod_rewrite)

這是每個全新安裝的 WordPress 必備的基礎核心骨架。它的主要功能是將所有非實體存在的檔案或目錄請求,自動重寫導向至根目錄的 index.php,以實現自訂的語意化固定網址:

# 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

二、強制將 HTTP 流量 301 永久重新導向至 HTTPS

當你的網站安裝了 SSL 安全憑證後,請務必在 .htaccess 最頂端加入以下規則,確保所有輸入 http:// 的訪客與搜尋引擎爬蟲,皆會自動跳轉至加密的 https:// 安全網址:

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

Web 伺服器安全與 SSL 憑證組態配置


三、網站安全加固:阻擋機敏檔案存取與防火牆規則

黑帽駭客經常使用自動化掃描腳本探測你的伺服器設定檔或嘗試繞過 PHP 安全限制。透過 .htaccess 能在請求抵達 PHP 之前就直接由 Apache 予以攔截拒絕。

1. 禁止外部存取 PHP 初始化檔(.user.ini)與 Wordfence WAF

知名安全外掛 Wordfence 會在系統建立 .user.ini 進行防火牆前置載入,必須嚴禁外部訪客直接下載:

# BEGIN Wordfence WAF
<Files ".user.ini">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>
# END Wordfence WAF

2. 禁止外部直接執行外掛目錄內的惡意腳本(以 Akismet 為例)

黑客往往利用外掛目錄的未授權 PHP 腳本進行提權或植入木馬。我們可以在特定外掛目錄(或全局 wp-content/plugins)下設定白名單,只允許瀏覽器讀取 CSS、JS 與圖片,全面阻斷任何 PHP 檔案的直接執行:

# 僅允許存取公開的前端靜態資源,禁止執行其它危險腳本
<IfModule !mod_authz_core.c>
    Order Deny,Allow
    Deny from all
</IfModule>
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# 白名單放行合法的 JS 與 CSS
<FilesMatch "^(form\.js|akismet\.js|akismet\.css)$">
    <IfModule !mod_authz_core.c>
        Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
</FilesMatch>

# 白名單放行圖片
<FilesMatch "^(logo-full-2x\.png)$">
    <IfModule !mod_authz_core.c>
        Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
</FilesMatch>

四、效能飛躍:停用 ETag、開啟持久連線與靜態快取

要讓網頁秒開、降低主機負載並在 Google PageSpeed Insights 獲得高分,快取標頭的設定至關重要。

1. 停用 ETag 與保持連線(Keep-Alive)

在分散式伺服器或反向代理架構下,預設的 ETag 標頭容易因伺服器節點不同而導致快取失效。停用 ETag 能有效提升快取命中率:

# Disable ETags & Enable Keep-Alive
<IfModule mod_headers.c>
    Header unset ETag
    Header set Connection keep-alive
</IfModule>
FileETag None

2. 設定 Expires Headers(瀏覽器快取過期機制)

透過 mod_expires 模組,明確告知訪客瀏覽器在特定天數內直接從本機快取讀取靜態資源,無需反覆向伺服器發出請求:

# BEGIN Expire headers
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 5 seconds"
    ExpiresByType text/html "access plus 600 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 216000 seconds"
    ExpiresByType application/javascript "access plus 216000 seconds"
    ExpiresByType application/x-javascript "access plus 216000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType image/svg+xml "access plus 2592000 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType font/truetype "access plus 2592000 seconds"
    ExpiresByType font/opentype "access plus 2592000 seconds"
</IfModule>
# END Expire headers

3. 設定 Cache-Control Headers

搭配 Cache-Control 標頭,精準控制公有與私有快取原則:

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
    # 圖片、字型與媒體檔案設定為公開快取 (Public)
    <filesMatch "\.(ico|jpe?g|png|gif|swf|woff2?)$">
        Header set Cache-Control "public, max-age=2592000"
    </filesMatch>
    # CSS 與 JS 檔案
    <filesMatch "\.(css|js)$">
        Header set Cache-Control "public, max-age=604800"
    </filesMatch>
    # HTML 與 PHP 動態檔案設定為私有並強制重新驗證
    <filesMatch "\.(x?html?|php)$">
        Header set Cache-Control "private, must-revalidate"
    </filesMatch>
</IfModule>
# END Cache-Control Headers

五、伺服器重啟與語法檢查指令

完成 .htaccess 編輯後,請切記在終端機中測試組態語法是否正確,避免因單一拼字錯誤導致全站拋出「500 Internal Server Error」:

# 檢查 Apache 設定檔語法 (Ubuntu / Debian)
sudo apache2ctl configtest

# 重啟 Apache 伺服器
sudo systemctl restart apache2

# 若使用 Bitnami 架構環境:
sudo /opt/bitnami/ctlscript.sh restart apache

結語:用好 .htaccess,為網站打下扎實地基

許多站長習慣依賴五花八門的快取與安全外掛,卻忽略了每多裝一個外掛就會多消耗一份伺服器記憶體。

充分善用 Apache 底層的 .htaccess 規則,能在最輕量、最接近作業系統核心的層級,以最零成本的方式完成強制轉址、惡意攔截與極速快取。花點時間調校好你的 .htaccess,你的 WordPress 網站就能兼顧極致速度與銅牆鐵壁般的安全保障!

✦ 獨立報導 · 讀者支持 ✦

以實際行動支持獨立觀點,與我們一同走得更遠

每一篇條理清晰的分析、每一次不隨波逐流的觀察,背後都是對真實與品質的堅持。我們拒絕內容農場與演算法流量綁架,堅持自由獨立的客觀發聲。

維持高品質的原創寫作與獨立營運,需要持續的實質力量。您可以選擇一次性贊助或每月定期支持,透過 Google 安全結帳,與我們一同守護這份深刻與清醒。

由 Google 安全處理付款 · 可隨時於 Google 帳戶管理或取消

為節省資源,留言將於捲動至此處或點擊按鈕後載入。