Apache服務器中的.htaccess文件(又稱“分布式配置文件”)是一種強大的目錄級配置工具,允許用戶在特定文檔目錄中通過包含一個或多個指令的文件,實現對當前目錄及其所有子目錄的配置管理。該文件的指令權限受限于服務器管理員通過AllowOverride指令的設置,其核心優勢在于無需修改主配置文件即可實現靈活的局部調整,特別適用于虛擬主機環境或需要獨立配置的場景。
子目錄中的.htaccess指令具有優先級,會覆蓋上級目錄或主服務器配置文件中的相同指令,確保目錄級配置的獨立性。文件上傳時需以ASCII模式傳輸,建議權限設置為644(僅所有者可讀寫,其他用戶僅讀),以避免權限異常導致的配置失效。
錯誤文檔定位是.htaccess的重要功能,通過自定義錯誤提示頁面提升用戶體驗。常見的HTTP錯誤代碼可分為客戶端錯誤(4xx)與服務器錯誤(5xx):
- 客戶端錯誤:包括401(未授權)、403(禁止訪問)、404(未找到)、405(方法不允許)、408(請求超時)、411(缺少內容長度)、412(預處理失敗)、413(請求實體過大)、414(URI過長)、415(不支持媒體類型)等;
- 服務器錯誤:以500(內部服務器錯誤)為代表。
配置時需預先準備錯誤頁面(如置于/errors目錄),通過`ErrorDocument 錯誤代碼 /目錄名/文件名.擴展名`指令關聯。例如:
```apache
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
```
對于簡短提示,可直接在指令中使用HTML文本,如`ErrorDocument 401 "您無權訪問此頁面,請放棄!"`。
為目錄設置訪問密碼需結合.htpasswd文件存儲加密用戶憑據。例如,通過工具生成加密密碼后,創建.htpasswd文件(內容如`zheng:y4E7Ep8e7EYV`),并存放于Web根目錄外以增強安全性。在.htaccess中配置如下指令:
```apache
AuthUserFile /完整路徑/.htpasswd
AuthGroupFile /dev/null
AuthName "請輸入訪問密碼"
AuthType Basic
require valid-user
```
其中,`require valid-user`允許.htpasswd中所有用戶訪問,或指定`require user 用戶名`限制特定用戶。
通過IP或域名限制訪問可實現安全管控。例如拒絕某IP(`deny from 210.10.56.32`)、IP段(`deny from 219.5.45.`,表示219.5.45.0-255)或所有訪問(`deny from all`),完整配置為:
```apache
Order allow,deny
deny from 指定IP或域名
allow from all
```
注意`Order`指令控制訪問順序,`allow,deny`表示先允許后拒絕。
為防止.htaccess中的敏感信息(如密碼路徑)泄露,可將其設置為禁止外部訪問:
```apache
Order allow,deny
deny from all
```
結合文件權限(如600)可進一步提升安全性。
URL轉向:適用于網站重構或文件遷移,可通過`Redirect 舊路徑 新路徑`實現單文件或目錄重定向,如`Redirect /old/index.html https://newsite.com/new/`。
默認首頁:通過`DirectoryIndex`指定默認文檔,支持多文件優先級,例如:
```apache
DirectoryIndex pmwiki.php index.html default.htm
```
當訪問目錄時,按優先級依次查找上述文件。
為避免圖片、文檔等資源被惡意盜鏈,可基于Referer頭進行過濾:
```apache
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
```
其中`[F]`表示禁止訪問,若需替換為提示圖片,可將最后一行改為`RewriteRule \.(gif|jpg)$ http://www.mydomain.com/replace.jpg [R,L]`。