Мы используем плагин 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
, или это вообще возможно?
Проведя некоторое исследование того, как работает поток данных, я реализовал небольшую тестовую программу, чтобы увидеть, что 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, используемый для файлов, не будет работать для маршрутов.. Необходимо будет использовать другой метод.