Pages

2016年11月20日 星期日


Apache的Order Allow Deny心得

轉自 http://www.fwolf.com/blog/post/191

今天又被這兩個參數小小的耍了一把,痛下決心整理一下,免得再被耽誤時間。

Allow和Deny可以用於apache的conf檔或者.htaccess檔中(配合Directory, Location, Files等),用來控制目錄和檔的訪問授權。

所以,最常用的是:
      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 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


沒有留言:

張貼留言