Apache2 - пересылать значение из параметра URL или файла cookie, в зависимости от того, что присутствует
Мне удалось использовать Apache, чтобы удалить параметр URL и поместить его в заголовок для передачи на другой сервер. Смотрите этот вопрос для справки.
Теперь я хотел бы добавить к этому, получая значение для заголовка из файла cookie, если его нет в URL. Вот что я попробовал:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)memberUuid=(.*)$
RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [CO=memberUuid:%2:localhost,E=memberUuid:%2,P]
RewriteCond %{HTTP_COOKIE} memberUuid=(.*)
RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [E=memberUuid:%2,P]
ProxyPreserveHost On
ProxyPass /excluded !
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
Header add iv-user "%{memberUuid}e"
RequestHeader set iv-user "%{memberUuid}e"
</VirtualHost>
Это все еще работает, если memberUuid
находится в URL, но, похоже, он не работает с cookie. у меня есть memberUuid
cookie в моем браузере, но если я оставлю параметр URL отключенным, iv-user
заголовок имеет пустое значение.
Я тоже пробовал ([^;]+)
для моего регулярного выражения, как рекомендуется в этом посте.
Я уверен, что моя ошибка во многом связана с тем, что я полный идиот Apache. Я полный нуб и не стесняюсь говорить это. Просветите меня пожалуйста!
редактировать
Я обновил свой виртуальный хост, чтобы apache установил memberUuid
cookie в браузере пользователя, если он исходит из строки запроса. Таким образом, я могу быть уверен, что файл cookie присутствует в следующем запросе (ранее у меня был целевой сервер).
1 ответ
Возможно, это не единственная проблема (я никогда раньше не проверял соответствие cookie в mod_rewrite); но я думаю, что это потому, что ваша обратная ссылка на RewriteRule
все еще %2
, У вас есть только одно совпадение в скобках в предыдущем RewriteCond
, так что расширяется ни к чему. Пытаться [E=memberUuid:%1,P]