<Directory> 區塊用於針對特定文件系統路徑及其子目錄定義訪問策略。核心屬性包含 Options、AllowOverride、Order、Allow、Deny 五大類,掌握它們的組合邏輯是精準控制目錄權限的關鍵。
Options FollowSymLinks Indexes MultiViews
| 選項 | 功能 | 安全建議 |
|---|---|---|
| All | 啟用除 MultiViews 外所有選項 | 生產環境慎用,攻擊面過大 |
| ExecCGI | 允許執行 CGI 腳本 | 僅腳本目錄啟用,配合 ScriptAlias |
| FollowSymLinks | 允許追蹤符號鏈接 | 必須啟用,否則 rewrite 失效 |
| Indexes | 無索引文件時列出目錄內容 | 生產環境必須關閉(-Indexes) |
| MultiViews | 內容協商(語言/編碼自適應) | 靜態站點可用,動態應用建議關閉 |
| None | 禁用所有功能 | 最高安全,但可能導致應用異常 |
| SymLinksIfOwnerMatch | 僅追蹤同屬主符號鏈接 | 比 FollowSymLinks 更安全,性能稍差 |
組合示例:Options -Indexes FollowSymLinks 禁用目錄瀏覽但保留符號鏈接支持。
| 值 | 行為 | 適用場景 |
|---|---|---|
| All | 允許 .htaccess 覆蓋所有可覆蓋指令 | 開發環境、共享主機 |
| None | 忽略 .htaccess(默認) | 生產環境、高性能要求 |
| AuthConfig | 僅允許認證相關指令 | 需密碼保護但不允許 rewrite |
| FileInfo | 允許文件類型、重寫、錯誤文檔等 | 需 URL 重寫但不開放認證配置 |
| Limit | 允許訪問控制指令 | 需 IP 白名單但不開放其他 |
| Options[=選項] | 允許覆蓋 Options 指定選項 | 細粒度控制目錄功能開關 |
生產環境建議:根目錄 AllowOverride None,僅在必要子目錄(如需 rewrite 的應用根目錄)設置 AllowOverride FileInfo。
AccessFileName .acl
默認 .htaccess,修改後可避免與版本控制系統衝突或提升辨識度。需放在 <Directory> 或更高層級作用域。
| Order 值 | 處理邏輯 | 口訣 |
|---|---|---|
| Allow,Deny | 先檢查 Allow,匹配則允許;否則檢查 Deny,匹配則拒絕;最後默認拒絕 | 白名單模式 |
| Deny,Allow | 先檢查 Deny,匹配則拒絕;否則檢查 Allow,匹配則允許;最後默認允許 | 黑名單模式 |
# 僅允許內網訪問(白名單模式)
Order Allow,Deny
Allow from 192.168.1.0/24
Allow from 10.0.0.0/8
Deny from all
# 拒絕特定惡意 IP,其他放行(黑名單模式)
Order Deny,Allow
Deny from 203.0.113.10
Deny from 198.51.100.0/24
Allow from all
192.168.1.100192.168.1.0/24192.168.1.0/255.255.255.0192.168(匹配 192.168.x.x)trusted.example.com(需 DNS 解析,性能較差)<Directory "/usr/local/apache/htdocs/phpmyadmin">
Options -Indexes FollowSymLinks
AllowOverride AuthConfig Limit
Order Allow,Deny
Allow from 192.168.1.0/24 10.0.0.0/8
# 管理員 IP 段
Deny from all
# 強制 HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
</Directory>
Apache 2.4 引入 mod_authz_host 新語法,舊版 Order/Allow/Deny 需載入 mod_access_compat 兼容。推薦新寫法:
# 僅允許內網
Require ip 192.168.1.0/24 10.0.0.0/8
# 拒絕特定 IP
Require all granted
Require not ip 203.0.113.10
# 組合邏輯
<RequireAll>
Require ip 10.0.0.0/8
Require not ip 10.0.0.5
</RequireAll>
<Directory> 五大核心屬性構建了 Apache 目錄級訪問控制的完整體系。理解 Options 功能開關、AllowOverride 權限下放、Order/Allow/Deny 匹配邏輯,配合 2.4 新語法 Require,可構建既安全又靈活的訪問策略。生產環境務必遵循「最小權限原則」:默認拒絕、按需開放、定期審計。