在apache中Order Allow Deny是我們網站管理員會常用的一些命令組了,下面來看看關于Order Allow Deny用法。
Order A, B (其中,A和B均可以代表allow或者deny,以下conlist表示控制列表)
A from conlist1
B from conlist2
那么最終訪問控制的結果為:(以(A)表示A的控制范圍,)
(A)= (conlist1) U (!conlist2) (!--取反,U--并集,n--交集)
(B)= (!A) = (!conlist1) n (conlist2)
(A) (B)= I(全集)
最常用的是:
- Order Deny,Allow
- Allow from All
注意: “Deny,Allow”中間只有一個逗號,不能有空格,逗號也只能有一個。
設定的含義是: 先設定”先檢查禁止設定,沒有禁止的全部允許”,而第二句沒有Deny,也就是沒有禁止訪問的設定,直接就是允許所有訪問了。這個主要是用來確保或者覆蓋上級目錄的設置,開放所有內容的訪問權。
按照上面的解釋,下面的設定是無條件禁止訪問:
- Order Allow,Deny
- Deny from All
如果要禁止部分內容的訪問,其他的全部開放:
- Order Deny,Allow
- Deny from ip1 ip2
或者
- Order Allow,Deny
- Allow from all
- Deny from ip1 ip2
apache會按照order順序決定最后使用哪一條規則,比如上面的第二種方式,雖然第二句allow允許了訪問,但由于在order中allow不是最后規則,因此還需要看有沒有deny規則,這樣到了第三句,符合ip1和ip2的訪問就被禁止了。
注意:order決定的”最后”規則非常重要
兩個錯誤的例子和解決方案:
- Order Deny,Allow
- Allow from all
- Deny from Vevb.com
解決方法:
- Order Deny,Allow
- 改為
- Order Allow,Deny
- 其他不變
- Order Allow,Deny
- Allow from ip1
- Deny from all
錯誤:想只允許來自ip1的訪問,但是,雖然第二句中設定了allow規則,由于order中deny在后,所以會以第三句deny為準,而第三句的范圍中又包含了ip1(all include ip1),所以所有的訪問都被禁止了。
- Order Deny,Allow
- Deny from all
- Allow from ip1
總則——
影響最終判斷結果的只有兩點:
1. order語句中allow、deny的先后順序;
2. allow、deny語句中各自包含的范圍。
溫馨提醒——
1. 修改完配置后要保存好并重啟Apache服務,配置才能生效;
2. 開頭字母不分大小寫;
3. allow、deny語句不分先后順序,誰先誰后不影響最終判斷結果;但都會被判斷到;
4. order語句中,“allow,deny”之間“有且只有”一個逗號(英文格式的),而且先后順序很重要;
5. Apache有一條缺省規則,“order allow,deny”本身就默認了拒絕所有的意思,因為deny在allow的后面;同理,“order deny,allow”本身默認的是允許所有;當然,最終判斷結果還要綜合下面的allow、deny語句中各自所包含的范圍;(也就是說order語句后面可以沒有allow、deny語句)
6. allow、deny語句中,第二個單詞一定是“from”,否則Apache會因錯而無法啟動。
7. “order allow,deny”代表先判斷allow語句再判斷deny語句,反之亦然。
新聞熱點
疑難解答