использовать прокси или перенаправлять в файл, если 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 . Что я пропустил?

1
задан 24 April 2020 в 11:57
1 ответ
# Cookie установлен. Отправить все запросы на прокси.
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 не установлен. Отправить весь запрос из /api/$ в local-file.php
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Правило перезаписи. /local-php.php [L]

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

1
ответ дан 24 April 2020 в 10:06

Теги

Похожие вопросы