Apache-2.4

SetEnvIf 在 PHP 路由上的行為

  • March 17, 2017

我們正在使用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。需要使用其他一些方法。

引用自:https://serverfault.com/questions/838763