Apache配置文件httpd.conf/htaccess中deny和allow的使用

看下下面的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規則
  • 三重疊 apache會按照order順序,把全部規則都判斷了,就像路由的規則同樣,好比上面的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>
  1. 容許全部請求訪問目錄
<Directory />
       Order deny,allow #1.默認容許所有請求
       deny from 192.9.200.69 #2按照順序,先判斷deny規則,拒絕192.9.200.69的請求
       Allow from all #3.重疊,容許全部請求
</Directory>
  1. 拒絕全部請求訪問目錄
<Directory />
       Order allow,deny #1.默認拒絕所有請求
       Allow from 192.9.200.69 #2.順序,容許 192.9.200.69請求
       deny from  all#3.重疊,拒絕全部請求
</Directory>
  1. 除了192.9.200.69的請求外,其餘請求均可以訪問目錄
<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
相關文章
相關標籤/搜索