Мне удалось использовать 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 присутствует при следующем запросе (раньше это делал целевой сервер).
Возможно, это не единственная проблема (я никогда раньше не выполнял сопоставление файлов cookie в mod_rewrite); но я думаю, это потому, что ваша обратная ссылка на RewriteRule
все еще %2
. У вас есть только одно совпадение в скобках в предыдущем RewriteCond
, поэтому он не расширяется до нуля. Пытаться [E=memberUuid:%1,P]