[英]htaccess “order” Deny, Allow, Deny
我只想允許一個國家/地區訪問,但不包括該國家/地區內的代理。
這就是我所擁有的(為了方便起見,簡化了版本)
<Limit GET POST>
order deny,allow
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
.
deny from 186.201.27.66
deny from 186.201.196.1
deny from 186.214.51.231
deny from 186.237.225.26
</Limit>
但是我知道這行不通。 我該怎么做呢?
更新:對於新的Apache 2.4,直接跳到最后。
Order關鍵字及其與Deny
和“ Allow
指令”的關系確實是一場噩夢。 了解我們如何最終得到這樣的解決方案,至少可以說是一種非直覺的解決方案,將是非常有趣的。
Order
關鍵字將對如何使用Allow
和Deny
偽指令產生重大影響。 Deny
和Allow
指令未按其寫入的順序應用,必須將它們視為兩個不同的塊(一個用於Deny
指令,一個用於Allow
)。 您有兩種主要模式:
Order Deny,Allow
Deny
規則。 Deny
規則拒絕了一些請求。 Allow
他們返回。 我將其改寫為:
Rule Deny
list of Deny rules
Except
list of Allow rules
Policy Allow (when no rule fired)
Order Allow,Deny
Allow
規則。 Allow
規則。 Allow
,您仍然可以拒絕Deny
。 以簡化形式:
Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
您需要允許列出作為國家/地區網絡的網絡。 在這個國家/地區,您要排除某些代理的IP地址。
您已采用“ 除此列表外”或“也許不是 ”以外的任何人 ,因此默認情況下, 任何人都可以訪問您的服務器,但“ Deny
列表中列出的代理IP除外,但是如果他們被拒絕,您仍然允許該國家/地區網絡。 太廣泛了。 不好。
通過反轉order allow,deny
您將處於拒絕所有人(除了此列表,或者可能不是)模式。 因此,您將拒絕所有人訪問,但允許使用國家/地區網絡,然后您將拒絕代理。 當然,您必須按照@Gerben和@Michael Slade的說法Deny from all
刪除“ Deny from all
(此答案僅說明了他們的所作所為)。
通常, Deny from all
order deny,allow
看到“ order deny,allow
默認情況下 order deny,allow
刪除允許訪問並進行簡單易讀的配置。 例如,在此之后指定允許的IP列表。 您不需要該規則,您的問題就是三向訪問模式(默認策略,例外,例外的例外)的完美案例。
但是設計這些設置的人肯定是瘋了。
整個授權方案已在Apache 2.4中使用RequireAll , RequireAny和RequireNone指令進行了重構 。 參見例如這個復雜的邏輯例子 。
因此,舊的奇怪的Order
邏輯變成了遺物,並引用了新的文檔:
過去,控制授權的方式和應用順序一直是個謎
只需使用order allow,deny
代替,然后deny from all
行中刪除deny from all
。
將您的代碼更改為
<Limit GET POST>
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
</Limit>
這樣,您的htaccess會拒絕除您明確允許的內容之外的所有內容allow from..
允許范圍內的代理可以輕松地被其他deny from..
規則所覆蓋。
正如Gerben所建議的,只需更改:
order deny,allow
deny from all
至
order allow,deny
這些限制將按您希望的那樣起作用。
可以在Apache的docs中找到詳細信息。
不是直接回答OP的問題,而是為了找到這個問題的人們,以便清楚地了解allow,deny
和deny,allow
之間的區別是什么:
將逗號讀為“ but”。
allow but deny
:白名單例外。 deny but allow
:帶有例外的黑名單。 僅允許一個國家/地區訪問,但排除該國家/地區內的代理
OP需要有例外的白名單,因此allow,deny
而不是deny,allow
在apache2中,linux配置
要求所有授予
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.