Apache 2.2允许来自env = _variable_

时间:2017-05-17 02:37:13

标签: apache apache2.2 setenvif

我设置了一个带有LDAP授权的Apache 2.2,它正如预期的那样运行得非常好,并且还使我可以在本地访问时绕过身份验证。

Allow from localIP hostnameA hostnameB 等......

如果我curl来自服务器,我不会获得任何Auth要求。所以一切顺利,并按预期工作。

我现在需要的是使一个特定的URL也绕过授权。

我尝试了使用SetEnvIf;

的所有常用解决方案
SetEnvIf Request_URI "^/calendar/export" bypassauth=true`
Allow from env=bypassauth IP_ADDRESS HOSTNAME_A HOSTNAME_B

但这只是不起作用!!

  1. 本地访问仍然不受限制,但远程不是(没有更改)
  2. 如果我在该URL脚本上转储我的服务器环境变量,我可以看到我的bypassauth变量正在传递。
  3. 我不能为我的生活弄清楚为什么Allow from env=bypassauth部分不起作用,而它仍然遵守额外的指令参数。

    我还使用Location指令尝试了另一个建议;

    <Location /calendar/export>
      Satisfy Any
      Allow from all
      AuthType None
    
      SetEnv WTF 123
    </Location>
    

    同样,我可以看到我的新环境变量(WTF)出现在此URL上(当我将服务器envs转储到脚本中时),所以我知道SetEnv和{{1}指令正在运行。

    我有什么遗漏(任何Apache2.2怪癖?),因为我目前看到的所有解决方案都没有用。重新启动Apache后,好像我的SetEnvIf更改无效。我开始感到自己的理智感。

    在编写Allow fromSatisfy AnyOrder allow, deny指令的指令时是否还有一个特定的顺序,这可能会影响到这一点?

1 个答案:

答案 0 :(得分:0)

终于成功了! :)

似乎我的网址正由mod_rewrite处理(我的环境变量以REWRITE_为前缀应该有响铃警报),根据这篇文章https://stackoverflow.com/a/23094842/4800587 mod_rewrite在我们的SetEnvIfAllow指令之后执行。

无论如何,长话短说;我使用重写/最终URL和Location部分来绕过使用Allow any指令的身份验证。所以我改变了......

<Location "/calendar/export">
  Allow from all
</Location>

要..

<Location "/calendar/index.php/export">
  Allow from all
</Location>

这是最终的URL(重写后),现在可以使用。