0

我有一个使用 LDAP 授权设置的 Apache 2.2,它按预期工作得非常好,并且也做到了,这样我就可以在本地访问它时绕过身份验证。

Allow from localIP 主机名A 主机 B等...

如果我curl来自服务器,则不需要任何身份验证。所以一切都很好,并且按预期工作。

我现在需要的是创建一个特定的 URL 来绕过授权。

我已经尝试了所有使用的常用解决方案SetEnvIf

SetEnvIf Request_URI "^/calendar/export" bypassauth=true`
Allow from env=bypassauth IP_ADDRESS HOSTNAME_A HOSTNAME_B

但这只是行不通!

  1. 本地访问仍然不受限制,但远程不受限制(那里没有变化)
  2. 如果我在该 URL 的脚本上转储我的服务器环境变量,我可以看到我的bypassauth变量正在被传递。

我终生无法弄清楚为什么该Allow from env=bypassauth部分不工作,而它仍然遵守附加的指令参数。

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

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

  SetEnv WTF 123
</Location>

同样,我可以看到我的新环境变量 ( WTF) 出现在这个 URL 上(当我在脚本中转储服务器环境时),所以我知道SetEnvandSetEnvIf指令正在工作。

我有什么遗漏(任何 Apache2.2 怪癖吗?),因为到目前为止我看到的所有解决方案都不起作用。就好像我的Allow from更改在重新启动 Apache 后没有任何效果。我开始觉得我的理智在下滑。

在为 编写指令时是否还有特定的顺序Satisfy AnyOrder allow, deny以及Auth*可能会影响这一点的指令?

4

1 回答 1

0

终于想通了!!:)

似乎我的 url 正在被处理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(重写后),现在可以使用。

于 2017-05-17T03:23:31.243 回答