В настоящее время я пытаюсь отправить запрос через прокси или в файл 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 уже установлен правильно?