in ,

.htaccess 是什麼?Linux 主機常見功能與設定完整教學指南

一次搞懂 .htaccess 的用途、限制、常見誤解與實際應用情境


 

什麼是 .htaccess?為什麼它能直接控制網站行為?

在 Linux 虛擬主機環境中,.htaccess 並不是網站程式的一部分
而是 Apache Web Server 提供的一種「目錄層級設定檔(Directory Context)」。

當使用者瀏覽網站時,請求會先進入 Apache,
Apache 會依照實體目錄結構逐層讀取 .htaccess
判斷是否需要轉址、是否允許存取、是否調整快取或錯誤頁,
最後才將請求交給 PHP 或直接回傳檔案。

因此 .htaccess 影響的是「網站行為層級」,
而不是單一程式碼檔案。

為什麼只有 Linux 主機才有 .htaccess?

.htaccess 是 Apache Web Server 專用的設定機制,
主要存在於 Linux / Unix 類型主機環境中。

Windows 主機多半使用 IIS(Internet Information Services),
其設定方式不同,改用 web.config
因此不支援 .htaccess。

.htaccess、PHP、php.ini、CloudLinux 與 MultiPHP 的關係

許多使用者會嘗試在網站目錄中自行建立 php.ini 來修改 PHP 設定,
卻發現實際上並沒有生效。
這通常不是設定錯誤,而是主機架構與權限層級不同所造成的結果。

.htaccess 的角色是控制 Apache 如何處理請求,
而不是直接用來調整 PHP 參數。

在目前多數 cPanel Linux 主機中,
主機商會搭配 CloudLinux
MultiPHP / PHP-FPM 使用,
PHP 的可調整項目已集中於 cPanel 介面中,
而非讓使用者直接修改 php.ini。

一般可調整的 PHP 設定,
會在 cPanel 的
「Select PHP Version → Options」 內提供,
這些選項是由主機商預先開放的安全範圍。

Select PHP Version實際操作教學可參考:https://wpoki.com/?p=6168

簡單來說:

  • 要調整 PHP 行為 → 使用 cPanel 提供的設定介面
  • 要控制網站行為 → 使用 .htaccess

.htaccess 常見用途總覽

.htaccess 可用來控制多種網站行為,以下列出在 Linux 虛擬主機環境中
最常見、也最實用的幾種用途。

1. 網址重寫(mod_rewrite)

可將動態網址改寫為 SEO 友善網址,
也是 WordPress 永久連結能正常運作的必要條件。

教學參考:https://wpoki.com/?p=5695

2. 網頁或目錄保護

可限制特定資料夾僅允許登入或指定 IP 存取,
常用於測試站、後台或不對外公開的目錄。

教學參考:https://wpoki.com/?p=5989

3. 防止目錄列出(Indexes)

避免訪客直接瀏覽資料夾內的檔案清單,
是非常基本但重要的安全設定。

教學參考:https://wpoki.com/?p=5977

4. 阻擋壞 Bot 或惡意爬蟲

當網站出現大量異常流量、資源被耗用,
或發現特定 Bot 不斷存取網站時,
可以透過 .htaccess 在 Apache 層級直接拒絕請求,
比 robots.txt 更具強制性。

常見做法是依據 User-Agent 進行阻擋,
例如:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (badbot|evilbot|crawler) [NC]
RewriteRule .* - [F,L]
</IfModule>

完整範例與進階設定方式,可參考以下教學:https://wpoki.com/?p=5707

提醒:阻擋規則應定期檢查,
避免誤封搜尋引擎或正常訪客。

5. 自訂錯誤頁面(404 / 500)

可為網站指定自訂錯誤頁面,
改善使用者體驗並避免顯示系統預設錯誤畫面。

ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

錯誤頁檔案需放在網站可存取的位置,
不建議直接轉回首頁,以免搜尋引擎誤判。

6. 設定 MIME 類型

當檔案下載或顯示行為異常時,
通常與 MIME 類型設定有關,
可透過 .htaccess 指定正確類型。

AddType application/pdf .pdf
AddType image/webp .webp

這能確保瀏覽器以正確方式處理檔案,
避免出現「應該顯示卻變成下載」的情況。

7.使用 .htaccess 關閉快取的實際用途

在修改網站樣式或除錯時,
瀏覽器快取可能導致畫面未即時更新。

此時可透過 .htaccess 暫時關閉快取:

<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>

此設定不建議長期使用,
完成測試後應移除以恢復效能。

以上用途已涵蓋多數虛擬主機使用情境,
其餘更進階的 Apache 設定,
通常會被限制在伺服器層級,無法透過 .htaccess 使用。

為什麼 .htaccess 一行錯就會 500 Internal Server Error?

與 PHP 或 HTML 不同,.htaccess 是 Apache 在
每一次請求當下即時解析的設定檔,
而不是等到程式執行時才處理。

只要 Apache 在解析 .htaccess 時發現以下任一情況:

  • 語法錯誤(例如少了符號、括號未關閉)
  • 使用了主機未啟用的模組(如 mod_rewrite、mod_headers)
  • 將指令放在不支援的環境中

Apache 就會直接中止該目錄的服務
並回傳 500 Internal Server Error
而不會嘗試忽略錯誤繼續執行。

這也是為什麼常見情況是:

  • 只改了一行 .htaccess,整個網站卻無法存取
  • 移除該行後,網站立刻恢復正常

這並不是網站程式壞掉,
而是 Apache 無法安全解析該目錄的設定所造成的保護機制。

因此在實務上建議:

  • 修改 .htaccess 前先備份原始檔案
  • 一次只調整一小段設定
  • 修改後立即測試,確認未出現 500 Error

只要養成這些習慣,就能大幅降低因 .htaccess 設定錯誤而導致網站無法存取的風險。

.htaccess 上下層目錄規則概念

在 Apache 的運作機制中,.htaccess 並不是只讀取單一檔案,
而是會依照實體目錄結構由上而下逐層套用規則

舉例來說,若你的目錄結構如下:

/public_html/
  └─ .htaccess
     └─ blog/
         └─ .htaccess

當使用者存取 /blog/ 下的頁面時,
Apache 會先讀取 /public_html/.htaccess
接著再讀取 /public_html/blog/.htaccess
兩者的設定都會生效,而不是二選一

若上下層的設定發生衝突,原則上是:

  • 上層規則先套用
  • 下層規則後套用
  • 下層僅能覆蓋「部分可覆蓋的指令」

例如:

  • Rewrite 規則、Header 設定,通常可由下層覆蓋
  • 安全性與權限相關設定(如封鎖、目錄限制),多半無法由下層放寬

因此,子目錄的 .htaccess 無法完全忽略或停用上層設定
只能在 Apache 允許的範圍內進行補充或覆寫。

若真的需要讓某個目錄完全不受上層規則影響,
通常必須修改 Apache 的主設定(VirtualHost 或 Server Config),
在虛擬主機環境中幾乎無法做到。

如何在 cPanel 顯示 .htaccess

    1. 登入 cPanel
    2. 開啟「檔案管理員」
    3. 右上角點擊「設定」
    4. 勾選「顯示隱藏檔案(. 開頭)」
    5. 按下「GO」

示意圖如下:

常見問題

Q1.”.htaccess” 是什麼?一定每個 Linux 主機都有嗎?

.htaccess 是 Apache Web Server 提供的目錄層級設定檔,大多數 Linux 虛擬主機都支援。
但若主機商在伺服器層級關閉此功能,使用者仍可能無法使用。

Q2.為什麼 Windows 主機沒有 “.htaccess”?

Windows 主機通常使用 IIS 作為 Web Server,其設定方式與 Apache 不同,
因此改用 web.config,而不支援 .htaccess。

Q3.為什麼我修改了 php.ini 或 “.htaccess”,PHP 設定卻沒有生效?

在多數 cPanel 主機中,PHP 會搭配 CloudLinux 與 MultiPHP 使用,
PHP 設定通常需透過 cPanel 的「Select PHP Version → Options」介面調整,
自行建立的 php.ini 或在 .htaccess 中設定 PHP 參數往往不會生效。

Q4.什麼情況下適合用 “.htaccess” 關閉快取?

.htaccess 關閉快取適合用於網站開發、除錯或修改樣式時,
可避免瀏覽器或伺服器快取造成畫面未即時更新。
不建議長期關閉,以免影響效能與 SEO。

Q5.為什麼 “.htaccess” 一行寫錯就會出現 500 Internal Server Error?

.htaccess 是 Apache 即時解析的設定檔,只要語法錯誤或使用不支援的指令,
Apache 便會直接中止該目錄服務並回傳 500 Error。
建議修改前先備份原檔。

Q6.子目錄的 “.htaccess” 可以完全不受上層影響嗎?

不行。Apache 會逐層套用所有 .htaccess 規則,
子目錄只能覆蓋部分設定(如 Rewrite 或 Header),
無法完全忽略上層的安全或權限相關設定。

Q7.”.htaccess” 阻擋壞 Bot 和 robots.txt 有什麼差別?

robots.txt 只是一種「建議」,惡意 Bot 往往不會遵守;
.htaccess 則是在 Apache 層級直接拒絕請求,
對於阻擋壞 Bot 或異常爬蟲更具強制性。

Q8.修改 “.htaccess” 前需要注意哪些事情?

建議修改前先備份原本的 .htaccess,
一次只調整一小段設定並立即測試,
若出現 500 Error,可快速還原以避免網站長時間無法存取。

CPANEL 虛擬主機相關教學總覽
文章來源:https://wpoki.com

Written by 婷Z

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

GIPHY App Key not set. Please check settings