設定訪問權限的時候,有三個關鍵字:Order , Allow, Deny。其中Order會指定"檢查權限設定的順序",Allow會指定"允許訪問名單",Deny則指定"禁止訪問名單"。因為Order的邏輯有點特殊,所以特以此篇記錄心得,不過詳情參考Apache的官方說明應該會更清楚。
以下直接以實例來說明,
Order Deny,Allow
Allow from All
以上設定代表的是:
- 先檢查禁止名單,若在名單內則禁止,除非在允許清單中有允許,而不在兩個名單內的,預設允許。
- 允許設定:全部通過
要注意Order後面的順序是先Deny再Allow,也就是沒有檢查到有禁止設定的,就直接允許。第二句代表的即是第一句中所要檢查的"允許設定(Allow)",因為沒有任何的"禁止設定(Deny)",所以直接執行"允許設定"中的內容,也就是全部允許。
再看下面的例子:
Order Allow,Deny
Deny from All
說明:
- 先檢查允許名單,不在允許名單的則禁止。通過的再檢查是否在禁止名單中,若有則禁止。不在兩個名單內的則預設禁止。
- 禁止名單:全部禁止
第一條是先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