[英].htaccess : understanding use of deny,allow and allow,deny
我試圖通過一個簡短的測試示例來了解order deny,allow
語句如何對我目前閱讀的內容做出反應。
我有以下用於測試的站點結構:
/index.htm
/.htaccess (1)
/子文件夾/index.htm
/子文件夾/.htaccess (2)
.htaccess (1)
order deny,allow
allow from all
子文件夾/.htaccess (2)
order deny,allow
deny from all
無論我在 2 個 .htaccess 文件中使用的允許、拒絕/拒絕、允許(以及所有 4 種可能的組合)的順序如何,我都不允許訪問子文件夾/index.htm。
據我所知,至少有一種組合,其中 root allow from all
wins on allow from all
wins deny from all
,所以我不明白為什么我不能在這個簡單的例子上成功做到這一點。
你能解釋一下原因和發生了什么嗎?
規則order deny,allow
和order allow,deny
定義了deny from
和allow from
指令的處理順序。 處理所有允許和拒絕規則,最終相關規則覆蓋任何先前的規則。 請參閱 mod_authz_host 模塊文檔的訂單指令部分進行確認。
請注意,所有 Allow 和 Deny 指令都被處理,這與典型的防火牆不同,后者只使用第一個匹配項。 最后一個匹配是有效的(也不同於典型的防火牆)。 此外,行在配置文件中出現的順序並不重要——所有 Allow 行都作為一組處理,所有 Deny 行被視為另一組,默認狀態由其自身考慮。
例如,如果我們在允許規則之前處理拒絕規則,我們可以有效地創建允許 IP 地址的白名單。
order deny,allow
deny from all
allow from 127.0.0.1
相反,在以下示例中,我們在拒絕規則之前處理允許規則,用於拒絕 IP 地址的黑名單。
order allow,deny
allow from all
deny from 127.0.0.1
子目錄將繼承父目錄的規則,除非它們聲明自己的規則。 如果子目錄使用 order 指令或 allow/deny 指令,則不會繼承父目錄的規則。 有關此行為的確認,請參閱錯誤 52406 ,它指的是本文檔的配置部分的合並部分。
對於沒有實現任何合並邏輯的模塊,例如 mod_access_compat,后面部分的行為取決於后面部分是否有來自模塊的任何指令。 配置將被繼承,直到進行更改,此時配置將被替換而不是合並。
您還可以執行此簡單測試來確認此行為。
將以.htaccess
放在父目錄.htaccess
。
order deny,allow
deny from all
以及子目錄.htaccess
中的任何或所有以下行。
order deny,allow
deny from 0.0.0.0
您將看到子目錄現在是可公開訪問的,即使父目錄包含deny from all
並且子目錄沒有allow from
指令。
根據文檔和實驗,父目錄似乎不可能以任何方式覆蓋子目錄的指令。
使用deny, allow
指令因為Apache 2.4已被棄用這里提到。
所以現在允許所有訪問的正確指令是
Require all granted
並且能夠撤銷對給定 IP 的訪問權限
Require all granted
Require not ip 10.345.67.892
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.