簡體   English   中英

.htaccess :理解拒絕,允許和允許,拒絕的使用

[英].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,alloworder allow,deny定義了deny fromallow 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM