Use o apache para remover um parâmetro de URL e adicioná-lo como um cabeçalho HTTP personalizado em um redirecionamento

1

Digamos que meu navegador envie uma solicitação para http://localhost/accounts?memberUuid=<some uuid>

Gostaria que apache2 escolhesse essa solicitação, adicionasse um cabeçalho HTTP personalizado com o uuid , removesse o uuid param do URL e redirecionasse para http://localhost:9000/accounts com o novo cabeçalho personalizado.

Eu sou um noob total do apache. Eu usei apenas como um servidor web simples para servir arquivos html, css e javascript. Então eu nem sei por onde começar, senão eu colocaria algumas coisas que tentei até agora.

Isso é possível apenas com o apache2? Preciso de algumas ferramentas adicionais para realizar isso? Obrigado!

Editar

Isso faz com que pareça que eu deveria ser capaz de adicionar os cabeçalhos que eu quiser pedido. Ou eu estou entendendo mal isso? Como eu usaria isso junto com um valor de entrada na URL para enviar o cabeçalho de que preciso?

    
por Samo 01.08.2012 / 23:42

3 respostas

1

Isso foi possível combinando RewriteRule com Proxy

<VirtualHost *:80>
  RewriteEngine On
  RewriteCond %{QUERY_STRING} ^(.*)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>
    
por 05.08.2012 / 06:06
1

Não é possível como descrito . A natureza sem estado do HTTP significa que você não pode associar uma resposta atual a uma solicitação futura, a menos que você use um mecanismo como cookies.

    
por 02.08.2012 / 04:04
1

Para responder à sua pergunta editada sobre mod_headers , provavelmente você está entendendo mal. O módulo permite adicionar cabeçalhos de solicitação adicionais no servidor final. Você não pode forçar os clientes a enviar cabeçalhos específicos livremente, a menos que você tenha uma regra de comunicação sobre os clientes e servidores de protocolo b / w HTTP.

Você provavelmente pode querer ir com Cookie. você pode usar Set-Cookie header. Não tenho 100% de certeza se você pode usar o cookie em sites que estão sendo executados em uma porta diferente, mas achei que poderia funcionar desde que o nome do domínio seja o mesmo. Sobre cookie, mesmo wikipedia explica muito bem.

link

EDITAR: Eu pessoalmente uso php muito, então aqui está um exemplo muito simples para definir Cookie e redirecionar em PHP:

// set cookie value
setcookie('uuid', $_GET['memberUuid'], time() + 3600);
// redirect
header('Location: http://localhost:9000/accounts');
exit;

e você pode recuperar o valor do cookie por $_COOKIE['uuid'] no localhost: 9000

EDIT 2:

Se você configurar apenas no apache, os mod_headers não serão capazes de fazer este trabalho, uma vez que ele não manipula variáveis GET, tanto quanto eu sei. Em vez disso, o mod_rewrite pode funcionar.

RewriteEngine On
RewriteRule ^/accounts\?memberUuid=(.*) http://localhost:9000/accounts [R,CO=uuid:$1:localhost:1440:/]

Eu não testei isso, mas sei que o mod_rewrite é capaz de recuperar valores do seu URL, configurar Cookies e redirecionar.

    
por 02.08.2012 / 04:11