Apache2 - mod_rewrite: RequestHeader e variáveis de ambiente

1

Eu tento obter o valor do parâmetro de solicitação "authorization" e armazená-lo no cabeçalho "Autorização" da solicitação.

A primeira regra de reescrita funciona bem. Na segunda regra de reescrita, o valor de $ 2 não parece estar armazenado na variável environement. Como consequência, o cabeçalho da solicitação "Autorização" está vazio.

Alguma ideia? Obrigado.

<VirtualHost *:8010>
  RewriteLog "/var/apache2/logs/rewrite.log"
  RewriteLogLevel 9
  RewriteEngine On
  RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [L,P]
  RewriteRule ^/(.*)&authorization=@(.*)@(.*) - [E=AUTHORIZATION:$2,NE]
  RequestHeader add "Authorization" "%{AUTHORIZATION}e"
</VirtualHost>

Eu preciso lidar com vários casos porque às vezes os parâmetros estão no caminho e algumas vezes eles estão na consulta. Dependendo do usuário. Este último caso falha. O valor do cabeçalho para AUTHORIZATION parece vazio.

# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [E=AUTHORIZATION:%2,NE,L,P]
# add the value of AUTHORIZATION  in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
    
por Guillaume 04.08.2009 / 10:10

3 respostas

1

Parece que você tem o sinalizador 'L' (último) na primeira regra. O processamento de regras vai parar aí e não haverá mais reescrita. Eu não acho que a segunda regra será alcançada. Tente remover a bandeira "L".

Editar

Ah, e você também tem o sinalizador 'P' (proxy) definido. Isso também parará de reescrever o processamento de regras nesse ponto e forçará um pedido de proxy através de mod_proxy.

Você pode fazer tudo em uma regra, pois a correspondência de padrão é a mesma. Eu não tenho certeza do que você está procurando, mas isso pode fazer isso:

RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [E=AUTHORIZATION:$2,NE,L,P]

Atualizar

Ah, acho que vejo o que você está tentando fazer agora. Assim que você especificar o [P] nos sinalizadores, a solicitação de proxy ocorrerá nesse ponto. Se eu leio a pergunta corretamente, você quer que a AUTHORIZATION var seja passada para essa solicitação, então você precisará colocar isso antes do [P]:

# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
RewriteRule ^/(.*) - [E=AUTHORIZATION:%2]
# add the value of AUTHORIZATION  in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [NE,L,P]

Completamente não testado, mas deve fazer o que você quiser - se eu entendi a pergunta corretamente.

Atualização do Apache Config

Você tem o AllowOverride FileInfo configurado para esse diretório no httpd.conf? Se não, então você não será capaz de usar RequestHeader em .htaccess

    
por 04.08.2009 / 10:30
0

Suspeito que você não possa substituir o cabeçalho Authorization ou que ele tenha sido anulado mais tarde no processo de solicitação. Como tenho certeza de que você sabe, Authorization: é usado para autenticação básica HTTP , então há uma boa chance de que algo mais seja fazendo isso. Você pode usar um cabeçalho de nome diferente?

    
por 05.08.2009 / 22:54
0

Existe algum motivo para você usar mod_rewrite para isso e não mod_setenvif ?

link

    
por 03.01.2013 / 16:01