Apache2 - Encaminhar um valor do URL param ou cookie, o que estiver presente

1

Eu consegui usar o apache para remover um url param e colocá-lo em um cabeçalho para ser passado para outro servidor. Veja esta questão para referência.

Agora, gostaria de adicioná-lo obtendo o valor do cabeçalho de um cookie, se ele não estiver presente no URL. Aqui está o que eu tentei:

<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>

Isso ainda funciona se o memberUuid estiver na URL, mas não funcionar com o cookie. Eu tenho o cookie memberUuid no meu navegador, mas se eu deixar o parâmetro de URL desativado, o cabeçalho iv-user terá um valor vazio.

Eu também tentei ([^;]+) para minha expressão regular, como recomendado em este post .

Tenho certeza de que meu erro tem muito a ver comigo ser um completo idiota do apache. Eu sou um noob completo e não tenho vergonha de dizer isso. Me ilumine por favor!

Editar

Atualizei meu host virtual para que o apache configure o cookie memberUuid no navegador do usuário se ele vier da string de consulta. Dessa forma, posso ter certeza de que o cookie está presente na próxima solicitação (eu estava fazendo com que o servidor de destino fizesse isso).

    
por Samo 05.08.2012 / 06:14

1 resposta

2

Este pode não ser o único problema (nunca fiz cookie matching em mod_rewrite antes); mas acho que é porque sua referência anterior para o RewriteRule ainda é %2 . Você só tem uma correspondência entre parênteses na RewriteCond anterior, então ela se expande para nada. Experimente [E=memberUuid:%1,P]

    
por 05.08.2012 / 09:53