說明: 控制哪些主機能夠訪問伺服器的一個區域
語法: Allow from all|host|env=env-variable [host|env=env-variable] ...
上下文: 目錄, .htaccess
覆蓋項: Limit
狀態: Base
模組: mod_access
Allow指令影響哪些主機可以訪問伺服器的一個區域。 可以用主機名稱、IP位址、 IP位址範圍或者其他環境變數中捕獲的用戶端請求特性來對訪問進行控制。
這個指令的第一個參數總是from。 隨後的參數可以有三種不同形式。 如果指定Allow from all,則允許所有主機訪問,需要 Deny和Order指令像下面討論的那樣配置。 要只允許特定一部分主機或主機群訪問伺服器,host可以用下面任何一種格式來指定:
一個功能變數名稱(部分)
例子:Allow from apache.org
允許名字與給定字串匹配或者以該字串結尾的主機訪問。 只有完整的名字組成部分才被匹配,因此上述例子將匹配foo.apache.org而不能匹配fooapache.org。 這樣的配置將引起伺服器執行一個對客戶IP位址的反查功能變數名稱操作而不管HostnameLookups指令是否設置
完整的IP位址
例子:Allow from 10.1.2.3
允許一個主機的一個IP位址訪問。
部分IP位址
例子:Allow from 10.1
IP位址的開始1到3個位元組,用於子網限制。
網路/遮罩對
例子:Allow from 10.1.0.0/255.255.0.0
一個網路a.b.c.d,和一個遮罩w.x.y.z。 用於更精確的子網限制。
網路/nnn 無內別域間路由規格
例子:Allow from 10.1.0.0/16
同前一種情況相似,除了遮罩由nnn個高位位元組構成。
注意以上後三個例子完全符合同一組主機。
IPv6位址和IPv6子網可以像下面這樣指定:
Allow from fe80::a00:20ff:fea7:ccea
Allow from fe80::a00:20ff:fea7:ccea/10
Allow指令的第三種參數格式允許對伺服器的訪問由 環境變數的一個擴展指定。 指定 Allow from env=env-variable時,如果環境變數env-variable存在則訪問請求被允許。 使用由mod_setenvif提供的指令,伺服器用一種基於用戶端請求的彈性方式提供了設置環境變數的能力。 因此,這條指令可以用於允許基於像User-Agent(瀏覽器類型)、Referer或者其他Http請求頭欄位 的訪問。
例子:
SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in
<Directory /docroot>
Order Deny,Allow
Deny from all
Allow from env=let_me_in
</Directory>
這種情況下,發送以KnockKnock/2.0開頭的使用者代理標示的瀏覽器將被允許訪問,而所有其他瀏覽器將被禁止訪問。
Deny 指令
說明: 控制哪些主機被禁止訪問伺服器
語法: Deny from all|host|env=env-variable [host|env=env-variable] ...
上下文: 目錄, .htaccess
覆蓋項: Limit
狀態: Base
模組: mod_access
這條指令允許基於主機名稱、IP位址或者環境變數限制對伺服器的訪問。 Deny指令的參數設置和Allow指令完全相同。
Order 指令
說明: 控制缺省的訪問狀態和Allow與Deny指令被評估的順序。
語法: Order ordering
預設值: Order Deny,Allow
上下文: 目錄, .htaccess
覆蓋項: Limit
狀態: Base
模組: mod_access
Order指令控制缺省的訪問狀態和 Allow與Deny指令被評估的順序。 Ordering是以下幾種範例之一:
Deny,Allow
Deny指令在 Allow指令之前被評估。 缺省允許所有訪問。 任何不匹配Deny指令或者匹配 Allow指令的客戶都被允許訪問伺服器。
Allow,Deny
Allow指令在 Deny指令之前被評估。 缺省禁止所有訪問。 任何不匹配Allow指令或者匹配 Deny指令的客戶都將被禁止訪問伺服器。
Mutual-failure
只有出現在Allow清單並且不出現在 Deny清單中的主機才被允許訪問。 這種順序與Order Allow,Deny具有同樣效果,不贊成使用,它包括了哪一種配置。
關鍵字只能用逗號分隔;它們之間不能有空格。 注意在所有情況下每個Allow和Deny指令語句都將被評估。
在下面的例子中,apache.org域中所有主機都允許訪問,而其他任何主機訪問都被拒絕。
Order Deny,Allow
Deny from all
Allow from apache.org
下面例子中,apache.org域中所有主機,除了foo.apache.org子域包含的主機被拒絕訪問以外,都允許訪問。 而所有不在apache.org域中的主機都不允許訪問,因為缺省狀態是拒絕對伺服器的訪問。
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
另一方面,如果上個例子中的Order指令改變為Deny,Allow, 將允許所有主機的訪問。 這是因為,不管設定檔中指令的實際順序如何, Allow from apache.org指令會最後被評估到並覆蓋之前的 Deny from foo.apache.org。 所有不在apache.org 域中的主機也允許訪問是因為缺省狀態被改變到了允許。
即使沒有伴隨Allow和Deny指令,一個Order 指令的存在也會影響到伺服器上某一個部分的訪問, 這是由於他對缺省訪問狀態的影響。 例如,
<Directory /www>
Order Allow,Deny
</Directory>
這樣將會禁止所有對/www目錄的訪問,因為缺省狀態將被設置為拒絕.
Order指令只在伺服器配置的每個段內部控制訪問指令的處理。 這暗示著,例如,一個在<Location>段出現的 Allow或者Deny指令總是將會在一個<Directory>段或者 .htaccess檔中出現的 Allow或Deny 指令之後被評估, 而不管Order指令中的設置為何。 要瞭解配置段落合併的詳細資訊, 參看How Directory, Location and Files sections work相關文檔。