Apache RewriteRule com uma substituição de variável RewriteMap para o argumento VAL para variável de ambiente

Apache RewriteRule com uma substituição de variável RewriteMap para o argumento VAL para variável de ambiente

Eu tenho um servidor Apache que fornece arquivos binários para um aplicativo (não para um navegador).

O aplicativo que faz a solicitação deseja o cabeçalho HTTP Content-MD5 no formato HEX. A única opção padrão no Apache é Base64. Se eu adicionar "ContentDigest on" ao meu VirtualHost, recebo esse cabeçalho em Base64.

Então escrevi um script perl, md5digesthex.pl, que me dá exatamente o que quero: MD5 no formato HEX, mas estou lutando com o RewriteRule para fazer meu servidor enviar o resultado.

Aqui está minha receita atual de Rewrite:

RewriteEngine on
RewriteMap md5inhex prg:/www/download/md5digesthex.pl
RewriteCond %{REQUEST_URI} ^/download/(.*)
RewriteRule ^(.*) %{REQUEST_URI} [E=HASH:${md5inhex:$1}]
Header set Content-MD5 "%{HASH}e" env=HASH

O problema é que não consigo definir a variável de ambiente HASH com base na saída da função de mapa md5inhex. Parece que esse comportamento não é suportado e não sei como formular isso...

Responder1

Acho que a melhor pergunta é: por que você está redefinindo o queRFC já define? Se você está tentando sobrecarregar o cabeçalho Content-MD5, é provável que você deva usar apenas um cabeçalho diferente. Se você está tentando adaptar isso ao seu programa, parece-me que seu programa está fazendo a coisa errada e deve ser corrigido.

EDIT: Então eu olhei para isso localmente. Você pode me dizer qual é a saída de md5digesthex.pl? Istodeveser um par de valores delimitado por espaços em branco, ou seja:

some/path/to/file somehash

Parece que a chave/valor pode não estar correspondendo, porque isso IRÁ fazer o que você deseja, assumindo que ${md5inhex:$1}seja executado corretamente. O que você pode tentar fazer, para teste, é definir uma variável fictícia; ou seja:

RewriteEngine on
RewriteMap md5inhex prg:/www/download/md5digesthex.pl
RewriteCond %{REQUEST_URI} ^/download/(.*)
RewriteRule ^(.*) %{REQUEST_URI} [E=HASH:${md5inhex:$1}]
Header set Content-MD5 "%{HASH}e" env=HASH

RewriteRule ^(.*)$ - [E=TEST_HASH:${md5inhex:somekey}]
Header set TestingHeader "%{TEST_HASH}e" env=TEST_HASH

Você pode usar algo como curl -I <server>/<path>para verificar se está sendo configurado. Posso verificar que, usando um RewriteMap formatado corretamente, isso definirá suas informações corretamente.

informação relacionada