PHP 路由上的 SetEnvIf 行为

PHP 路由上的 SetEnvIf 行为

我们正在使用mod_auth_openid 插件为我们网站的一部分提供 OpenID 支持。它工作得很好,但我们遇到了“除非发生以下情况,否则请这样做”的情况,我不确定我遗漏了什么。

有一些 URI 我们不希望应用此规则。从表面上看,这很简单。

<Directory "/opt/homeapp/web">
  AuthType openid-connect
  SetEnvIf Request_URI "^/(callbacks.php.*)$" allow

  require claim hd:example.com
  require env allow
  require valid-user
</Directory>

这对于命中callbacks.php文件以及任何其他实际文件的内容都很有效。

我的问题出在尝试匹配 Symfony 路由。如果传入请求是/combobulator/newForm,则似乎Request_URI应该等于/combobulator/newForm。然而,事实并非如此。

SetEnvIf Request_URI "^/combobulator/(.*)" allow
SetEnvIf Request_URI "combobulator/(.*)$" allow
SetEnvIf Request_URI "combobulator" allow
SetEnvIf Request_URI "(combobulator)" allow

所有这些都不起作用。

您如何匹配路线SetEnvIf,或者这是否可能?

答案1

在对数据流的工作原理进行一些调查后,我实现了一些测试工具来查看Request_URI执行的这个阶段的情况。

<Directory "/opt/homeapp/web">
  AuthType openid-connect
  SetEnvIf Request_URI "^/(callbacks.php.*)$" allow
  SetEnvIf Request_URI "(.*)" check_uri=$1

  require claim hd:example.com
  require env allow
  require valid-user
</Directory>

然后使用其中的自定义LogFormat语句%{check_uri}e,我设法表明,Request_URI在此阶段对于大多数路线而言都是index.php

也就是今天,用于文件的 SetEnvIf 方法不适用于路由。需要使用其他方法。

答案2

这解决了我使用 wp-json api 路由的问题Require env REDIRECT_noauth 排除受保护的子 URL 在 Apache 2.4 上不起作用?

相关内容