Apache-2.4
SetEnvIf 在 PHP 路由上的行為
我們正在使用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 路由。如果傳入的請求是 to
/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
,或者這甚至可能嗎?
在對數據流的工作方式進行了一些調查後,我實現了一些測試工具來查看
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 方法不適用於 routes。需要使用其他一些方法。