【发布时间】:2014-07-20 21:40:00
【问题描述】:
如果主机是 dev.example.com 或 test.example.com,我想告诉 Apache 2.4.9 要求有效用户。这不起作用:
AuthType Basic
AuthName "Speak, friend, and enter."
AuthBasicProvider file
AuthUserFile /sites/example/conf/.htpasswd
AuthGroupFile /dev/null
SetEnvIfNoCase Host ^dev\.example\.com$ env_is_protected
SetEnvIfNoCase Host ^test\.example\.com$ env_is_protected
Require valid-user
Require not env env_is_protected
它会导致服务器错误;显然not env 无效contrary to the documentation。
在以下示例中,前五行始终与第一个示例相同。
这不起作用:
SetEnvIfNoCase Host ^dev\.example\.com$ env_is_protected
SetEnvIfNoCase Host ^test\.example\.com$ env_is_protected
<RequireAny>
Require valid-user
<RequireNone>
Require env env_is_protected
</RequireNone>
</RequireAny>
它会导致服务器错误。 documentation explains:
因为否定授权指令无法返回 成功的结果,他们不能显着影响结果
指令。 (最多他们可以使指令 在它们失败并且所有其他指令返回的情况下失败 中性值。)因此否定授权指令不是 在 指令中允许。
这不起作用:
SetEnv env_is_unprotected 1
SetEnvIfNoCase Host ^dev\.example\.com$ !env_is_unprotected
SetEnvIfNoCase Host ^test\.example\.com$ !env_is_unprotected
Require valid-user
Require env env_is_unprotected
该指令设置的内部环境变量设置后 大多数早期请求处理指令都会运行,例如访问 控制和 URI 到文件名的映射。如果环境变量 你正在设置的意思是作为这个早期处理阶段的输入 例如 RewriteRule 指令,您应该改为设置 带有 SetEnvIf 的环境变量。
这行得通:
SetEnvIf Host . env_is_unprotected
SetEnvIfNoCase Host ^dev\.example\.com$ !env_is_unprotected
SetEnvIfNoCase Host ^test\.example\.com$ !env_is_unprotected
Require valid-user
Require env env_is_unprotected
这看起来像一个 hack,需要几个小时才能弄清楚。我是否没有发现正确方法来实现我的非常简单的目的?有没有更好的办法?
【问题讨论】:
标签: apache .htaccess httpd.conf basic-authentication server-configuration