Назад | Перейти на главную страницу

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