
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.