2015-10-05 59 views
0

我寫這個的.htaccess配置,它的工作原理:Apache配置:如何從env = protected拒絕,但允許從env = errorhandler?

SetEnvIfNoCase Host ^staging\. protected 
SetEnvIfNoCase Host ^dev\. protected 

AuthType basic 
AuthName "Protected" 
AuthUserFile "/path/to/.htpasswd" 

Order deny,allow 
deny from env=protected 
Require valid-user 
Satisfy any 

它檢查主機名開頭「升級」。或「開發」。並設置環境變量「protected」。如果已設置,瀏覽器將要求輸入密碼。如果不是,則不會影響訪問限制。這是預期的行爲。

不幸的是,我正在使用的CMS從本地主機執行自己的HTTP請求,以在內部獲取錯誤頁面,如果404錯誤發生。但是服務器本身沒有被認證,所以這個失敗了。

我能夠這樣設置另一個環境變量:

SetEnvIfNoCase Request_URI "404$" errorhandler 

但它有沒有效果,即使我改變這樣

Order allow,deny 
allow from env=errorhandler 
deny from env=protected 
Require valid-user 
Satisfy any 

什麼我需要改變的最後一個塊,如果設置了env = proctected,則要求輸入密碼,但是如果env = errorhandler也設置,則跳過密碼?謝謝。

回答

1

嘗試這些指令:

SetEnvIfNoCase Host ^(dev|staging)\. protected 
SetEnvIfNoCase Request_URI 404 !protected 

AuthType basic 
AuthName "Protected" 
AuthUserFile "/path/to/.htpasswd" 
Require valid-user 
Satisfy any 

Order allow,deny 
allow from all 
deny from env=protected 
+1

這看起來很有希望!我會讓你保持最新... – Armin

+0

當然,讓我知道你是否遇到過這個問題。 – anubhava

+0

不幸的是它沒有工作。所有呼叫仍保留在401響應中。 – Armin