我设置了一个带有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
但这只是不起作用!!
bypassauth
变量正在传递。 我不能为我的生活弄清楚为什么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 from
,Satisfy Any
和Order allow, deny
指令的指令时是否还有一个特定的顺序,这可能会影响到这一点?
答案 0 :(得分:0)
终于成功了! :)
似乎我的网址正由mod_rewrite
处理(我的环境变量以REWRITE_
为前缀应该有响铃警报),根据这篇文章https://stackoverflow.com/a/23094842/4800587 mod_rewrite
在我们的SetEnvIf
和Allow
指令之后执行。
无论如何,长话短说;我使用重写/最终URL和Location
部分来绕过使用Allow any
指令的身份验证。所以我改变了......
<Location "/calendar/export">
Allow from all
</Location>
要..
<Location "/calendar/index.php/export">
Allow from all
</Location>
这是最终的URL(重写后),现在可以使用。