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]

Другие вопросы по тегам