我写了这个.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,则跳过密码?感谢。
答案 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