无法让setenv在.htaccess中工作

时间:2010-09-10 20:55:55

标签: linux apache .htaccess

SetEnv似乎对我不起作用。我在.htaccess中试过这个:

SetEnvIf Remote_Addr ^192\.168\.0$ ip_ok
<IfDefine !ip_ok>
  AuthName "Guest Login"
  AuthType Basic
  AuthUserFile /opt/lampp/lib/ok_users/guests.users
  require valid-user
</IfDefine>

我必须提供用户名/密码凭证,即使我的IP是192.168.0.10而服务器(linux 1.6.8a的centos5 / xampp)是192.168.0.1

所以我尝试了这个:

SetEnv ip_ok
<IfDefine !ip_ok>
  AuthName "Guest Login"
  AuthType Basic
  AuthUserFile /opt/lampp/lib/ok_users/guests.users
  require valid-user
</IfDefine>

但是setenv没有设置ip_ok,我仍然受到挑战。

然后我尝试了这个:

SetEnv ip_ok
<IfDefine ip_ok>
  AuthName "Guest Login"
  AuthType Basic
  AuthUserFile /opt/lampp/lib/ok_users/guests.users
  require valid-user
</IfDefine>

我没有受到挑战。因此,IfDefine正在运作。

为什么我不能让SetEnv和SetEnvIf工作的任何想法?我用谷歌搜索并阅读但无法破解它。

1 个答案:

答案 0 :(得分:1)

<IfDefine>不能像你想的那样工作。它检查通过-Dparameter(或Apache 2.3中的httpd at startup)传递给Define的参数,而不是环境变量。

没关系,你应该能够做到你想做的事情:

Order allow,deny
AuthName "Guest Login"
AuthType Basic
AuthUserFile /opt/lampp/lib/ok_users/guests.users
Require valid-user
Allow from 192.168.0
Satisfy Any

设置为Any时,Satisfy directive允许您在通过主机验证时被授予访问权限,如果您提供了密码。