2011-04-30 25 views
8

我的主機有多個我的站點部署(dev,stage,production)。當且僅當他們設置的enviornment變量等於'dev'時,我如何在我的htaccess文件中添加HTTP Auth頭文件? (這意味着他們設置了一個名爲SITE_ENVIRONMENT的變量,這個變量可以是dev,stage或者prod,這取決於你訪問的是哪個站點。)有條件地要求根據apache env變量進行HTTP認證

PS。我很熟悉需要通過htaccess以香草方式授權,但我是完全的。當涉及到評估變量或根據結果寫一塊丟失

+0

相關問題:* [如何做到有條件的.htaccess密碼保護](http://stackoverflow.com/q/5252330/195835)* – 2016-09-23 04:09:09

回答

0

我不知道這是可能的

Theoreticaly,你可以使用:

RewriteCond %{ENV:SITE_ENVIRONMENT} ^dev$ 

,以確定哪些環境你在,但我可以考慮如何編寫RewriteRule來強制進行基本認證......除非您重定向到處理基本認證的另一個頁面,並將SITE_ENVIRONMENT變量重置爲「dev-authenticated」或其他內容。

+1

我通過聊天證實了這一點一些apache開發者。沒有辦法寫一個RewriteRule來觸發一個基本的認證,所以你必須考慮另一種方法。 – iandouglas 2011-05-01 00:39:51

+0

啊,我明白了,謝謝你的回覆。發佈之後,我重新考慮了我的方法,並且由於不同的環境是從svn存儲庫部署的,所以我只是創建了一個dev站點分支。 – Jay 2011-05-01 02:28:54

16

您可以使用SetEnvIf模式匹配域並確定使用哪個環境。

SetEnvIfNoCase Host ^dev.domain.com$ is_on_dev_site 

AuthType Basic 
AuthName "Protected Login" 
AuthUserFile /path/to/.htpasswd 
AuthGroupFile /dev/null 
Require valid-user 
Deny from env=is_on_dev_site 
#allow something like API usage to bypass 
SetEnvIf Request_URI "(/api/.(.*))$" allow 
Order deny,allow 
Allow from env=allow 
Satisfy any 

人:http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html