我们正在使用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 上不起作用?