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

использовать прокси или перенаправить в файл, если cookie установлен, и только для подкаталога

В настоящее время я пытаюсь отправить запрос через прокси или в файл PHP на основе файла cookie. Правило применяется только к /api.

Это то, что у меня есть. Это часть моей конфигурации VirtualHost:

RewriteEngine on
# Cookie is not set. Send all request from /api/$ to local-file.php
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /local-php.php [L]

# Cookie is set. Send all request to the proxy.
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b
RewriteRule ^/(.*)$ http://proxy-domain.local/$1 [P,L]
ProxyPassReverse /api http://proxy-domain.local

Мои запросы теперь правильно маршрутизируются на основе файла cookie. Но, к сожалению, это глобально, и не только если путь начинается с /api. Что я пропустил?

# Cookie is set. Send all request to the proxy.
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b
RewriteRule ^/(.*)$ http://proxy-domain.local/$1 [P,L]

Первое условие успешно только тогда, когда REQUEST_URI делает не начать с /api. Однако это условие может показаться излишним, поскольку вы можете выполнить ту же проверку в RewriteRule сама директива, которая в настоящее время соответствует все.

Например:

# Cookie is set. Send all request to the proxy.
RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b
RewriteRule ^/api/(.*)$ http://proxy-domain.local/$1 [P,L]

Обратите внимание, что для этого требуется, чтобы запрос начинался как минимум с /api/не /api - это нормально?

Однако я бы также поставил под сомнение логику первого блока правил:

# Cookie is not set. Send all request from /api/$ to local-file.php
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /local-php.php [L]

Помимо того, что не делал комментарий заявляет, что это перезаписывает URL-адрес, когда запрос не Начало /api И cookie не установлен. Что делать, если cookie установлен? Это также не будет перезаписывать запрос самого корневого каталога - что может быть намеренно, если DirectoryIndex уже установлен правильно?