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

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 присутствует при следующем запросе (раньше это делал целевой сервер).

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