Apache配置:如何拒绝来自env = protected但允许来自env = errorhandler?

时间:2015-10-05 10:08:19

标签: .htaccess apache2 environment-variables

我写了这个.htaccess配置,它有效:

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”。如果已设置,浏览器将要求输入密码。如果不是,则不会影响访问限制。这是预期的行为。

不幸的是,如果发生404错误,我正在使用的CMS会从localhost执行自己的HTTP请求以在内部获取错误页面。但是服务器本身没有经过身份验证,因此失败了。

我能够像这样设置另一个环境变量:

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 个答案:

答案 0 :(得分: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