今天在公司配置Zend本地Apache環境的時候,發現在zend.conf中的權限控制中的幾段句子,如下所示:
代碼如下:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
自己在配置虛擬主機的時候需要配置VirtualHost,
代碼如下:
<VirtualHost *:80>
ServerName backend
DocumentRoot "D:/Program Files/Zend/Apache2/htdocs/public"
SetEnv APPLICATION_ENV "development"
<Directory "D:/Program Files/Zend/Apache2/htdocs/public">
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
兩段Order語句的不同引起了我的興趣,那么到底這里的順序是怎樣執行的呢?先前聯想到了“短路”的概念,有相同,也有不同,下面用幾個例子來分析一下。
代碼如下:
Order deny,allow
–(注意deny與allow之間只有一個逗號,并且只能這樣書寫,其他寫法都是錯誤的)
Allow from all
Deny from 219.204.253.8
全部都可以通過。
代碼如下:
Order deny,allow
Deny from 219.204.253.8
Allow from all
–全部都可以通過 。
代碼如下:
Order allow,deny
Deny from 219.204.253.8
Allow from all
只有219.204.253.8不能通過。
代碼如下:
Order allow,deny
Allow from all
Deny from 219.204.253.8
只有219.204.253.8不能通過 。
根據Apache官網的 解釋,allow方向影響的是可以通過一個服務器區域的主機,這個主機可以通過主機名(hostname)、IP地址、IP地址范圍或者通過其他的客戶端 請求條件。與之相反的正是deny,deny控制的是不被服務器所允許的主機,deny的識別方式也是主機名(hostname)、IP地址及范圍、或者 環境變量等。而位于頂層的Order起到的作用就是制定規則。比如上面案例1中,我們的Order為先檢查deny后檢查allow,那么我們可以把下面 的兩句話當做一個list,這兩句話沒有自然的先后順序,即檢查deny時候,我們發現219.204.253.8這臺主機是滿足拒絕條件的,那么就進行 第二步檢測,即allow的檢查,發現allow做的事情是:allow from all,意思即全部來源都可以獲得通過。這里的關鍵是,一切訪客進來之后都不是一棒子打死的,都要經過兩步驗證,那么可以發現全部機器都是可以獲得通過 的,與結果一致。
新聞熱點
疑難解答