看下下面的apache的一個配置,具體代碼以下:apache
<Directory /> Order allow,deny #1 Allow from all #2 deny from 192.9.200.69 #3 </Directory>
Allow和Deny喲關於apache的conf文件或者htaccess文件中(配合Directory,Location,Files等),用來控制目錄和文件的訪問受權。
注意 deny和allow之間有一個逗號,不是空格,且只能有一個逗號,大小寫不限。dom
因此,最經常使用的是:
Order Deny,Allow
Allow from Allcode
當看到apache的配置時能夠從一下角度來理解,一默認,二順序,三重疊。ip
Order allow,deny
,這句話的做用是配置allow和deny的順序,默認只有最後一個關鍵字起做用,因此這裏起做用的就是deny——拒絕,因此要拒絕/容許某個特殊的IP就將此策略(拒絕/容許)放在order
這一句的最後Order
規定了規則的執行(判斷)順序,無論下面的allow和deny的順序如何,都會按着Order ....
這一句的規定的allow和deny的順序來執行 allow和deny的規則,好比Order allow,deny
,那麼限制性allow的規則,在執行deny的規則,即時下面先寫的deny規則
後寫的allow規則
。Allow from all
容許全部請求經過,deny from 192.9.200.69
拒絕來自192.9.200.69的包,最終結果是拒絕來自192.9.200.69的包。也許上邊沒有說明白,咱們再來看下面的例子,每一個配置後面都有簡單的說明,配置文件中的「#」號後邊的數字表示配置項起做用的前後順序。路由
1. 只容許192.9.200.69請求訪問目錄io
<Directory /> Order deny,allow #1.默認容許所有請求 deny from all #2.按照順序,先判斷deny規則,拒絕全部請求 Allow from 192.9.200.69 #3.重疊,容許IP192.9.200.69的請求 </Directory>
<Directory /> Order deny,allow #1.默認容許所有請求 deny from 192.9.200.69 #2按照順序,先判斷deny規則,拒絕192.9.200.69的請求 Allow from all #3.重疊,容許全部請求 </Directory>
<Directory /> Order allow,deny #1.默認拒絕所有請求 Allow from 192.9.200.69 #2.順序,容許 192.9.200.69請求 deny from all#3.重疊,拒絕全部請求 </Directory>
<Directory /> Order allow,deny #1.默認拒絕所有請求 Allow from all #2.順序,容許全部請求 deny from 192.9.200.69#3.重疊,拒絕192.9.200.69請求 </Directory>
Allow和Deny能夠用於apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用來控制目錄和文件的訪問受權。配置
按照上面的解釋,下面的設定是無條件禁止訪問:請求
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 domain.org
錯誤:想禁止來自domain.org的訪問,可是deny不是最後規則,apache在處理到第二句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