2013-03-19 51 views
0

聽起來像「訂單拒絕,允許」和「訂單允許,拒絕」之間的基本區別是前者是寬容的(「允許」指令優先,默認情況下允許任何人)而後者是禁止的(「拒絕」指令是優先的,默認情況下不允許任何人)。Apache「訂單」指令理由

假設我理解正確,這是非常不直觀的,我想知道爲什麼順序指令這樣工作。基本原理是什麼?例如,這是某人關於表達訪問控制的好方法嗎?以不同的順序處理請求是否具有計算優勢?這是爲了可擴展性嗎?

回答

1

如果您正在進行非平凡的訪問控制,則有時候兩個規則會匹配相同的請求。當他們發生衝突時(即:一個人說「拒絕」,另一個說「允許」),你需要某種方式來決定哪一個優先。或者,會出現沒有規則匹配的情況,並且您需要默認策略來涵蓋這些情況。

在Apache中,它被稱爲Order,它的工作原理與此類似,主要是因爲Apache決定處理訪問控制。它處理它們的方式將規則分解爲「允許」規則和「拒絕」規則。當一個請求到達,處理在概念上發生這樣的:

  1. 阿帕奇首先運行拒絕規則如果訂單deny,allow,或第一允許規則如果訂單是allow,deny
  2. Apache運行其他規則。
  3. 最後一場比賽勝出。如果沒有匹配,則Order中的最後一個操作是該策略。

(有明顯一些優化這一進程。據說在allow,deny,如果允許規則不匹配,Apache的根本不屑與拒絕規則,因爲它會已經無論如何拒絕該請求。同樣地,如果deny,allow中沒有匹配拒絕規則,則允許該請求(因爲沒有什麼可以阻止它)。但從概念上講,可以考慮運行這兩套規則。)

我想應該有可能給每個規則一個優先參數或一些東西,並讓管理員決定什麼優先權給予一切。坦率地說,當你想要做的就是知道是允許還是拒絕某些東西時,這並不值得。既然通過給予「允許」或「拒絕」規則有機會根據處理順序覆蓋另一個規則,就可以很容易地完成,這就是他們所做的。但是不同的網站可能會要求另一套規則優先考慮,因此它們使其可配置。

+0

感謝您的迴應,它有助於瞭解預期用途。我可以看到這個*在某些情況下可能會有用,但是我仍然遇到了麻煩,我的頭繞着一個用例,在這個用例中,切換「Order」指令優先於第一個「Allow」或「Deny」指令遇到一個範圍。後一種方法似乎更靈活,更直觀。 – 2013-03-19 19:29:05

+0

問題是,雖然......當你有來自不同範圍的規則時會發生什麼?如果你有......說......全局默認策略,特定於站點的覆蓋,特定於位置的規則,特定於目錄的規則,* sub * -directory規則,.htaccess文件中的內容等等,直觀性就會大打折扣。無論你如何處理它,你都會打破某人的用例。除非你給他們一個方法指定這些規則適用於給定網站的順序......哦,等等...... :)原來,Order是這些簡單的工作之一。任何更多的東西都必須證明其複雜性。 – cHao 2013-03-19 20:05:30

+0

我仍然懷疑,但我將其標記爲正確的答案。謝謝。 – 2013-03-19 20:27:42