Apache的目錄權限控制Order, Allow, Deny

設定訪問權限的時候,有三個關鍵字:Order , Allow, Deny。其中Order會指定"檢查權限設定的順序",Allow會指定"允許訪問名單",Deny則指定"禁止訪問名單"。因為Order的邏輯有點特殊,所以特以此篇記錄心得,不過詳情參考Apache的官方說明應該會更清楚。

以下直接以實例來說明,

Order Deny,Allow
Allow from All

以上設定代表的是:

  1. 先檢查禁止名單,若在名單內則禁止,除非在允許清單中有允許,而不在兩個名單內的,預設允許
  2. 允許設定:全部通過

要注意Order後面的順序是先Deny再Allow,也就是沒有檢查到有禁止設定的,就直接允許。第二句代表的即是第一句中所要檢查的"允許設定(Allow)",因為沒有任何的"禁止設定(Deny)",所以直接執行"允許設定"中的內容,也就是全部允許。

再看下面的例子:

Order Allow,Deny
Deny from All

說明:

  1. 先檢查允許名單,不在允許名單的則禁止。通過的再檢查是否在禁止名單中,若有則禁止。不在兩個名單內的則預設禁止。
  2. 禁止名單:全部禁止

第一條是先Allow才Deny,所以就會先檢查允許設定,沒有找到允許設定的就直接禁止。因為本例中只有"禁止設定",所以直接執行禁止設定,因此這個例子會禁止所有訪問。

那麼如果我們要禁止特定ip的訪問時怎麼處理呢?請參考下面範例

Order Allow,Deny
Allow from All
Deny from xxx.xxx.xxx

如果把Order的順序反過來,就沒有作用囉。雖然Deny清單有設定,但因為Allow名單中允許所有訪問,所以Deny就沒有用了。

Order Deny,Allow
Allow from All
Deny from xxx.xxx.xxx