Apache RewriteRule con una sustitución de variable RewriteMap para el argumento VAL de la variable de entorno

Apache RewriteRule con una sustitución de variable RewriteMap para el argumento VAL de la variable de entorno

Tengo un servidor Apache que envía archivos binarios a una aplicación (no a un navegador).

La aplicación que realiza la solicitud quiere el encabezado HTTP Content-MD5 en formato HEX. La única y predeterminada opción dentro de Apache es Base64. Si agrego "ContentDigest on" a mi VirtualHost, obtengo este encabezado en Base64.

Así que escribí un script en Perl, md5digesthex.pl, que me da exactamente lo que quiero: MD5 en formato HEX, pero tengo problemas con RewriteRule para que mi servidor envíe el resultado.

Aquí está mi receta actual de Reescritura:

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

El problema es que parece que no puedo configurar la variable de entorno HASH en función de la salida de la función de mapa md5inhex. Parece que este comportamiento no es compatible y no sé cómo formularlo...

Respuesta1

Creo que la mejor pregunta es: ¿por qué estás redefiniendo lo que significaRFC ya define? Si está intentando sobrecargar el encabezado Content-MD5, es probable que deba utilizar un encabezado diferente. Si está intentando adaptar esto a su programa, me parece que su programa está haciendo algo incorrecto y debería corregirse.

EDITAR: Entonces miré esto localmente. ¿Puede decirme cuál es el resultado de md5digesthex.pl? Éldeberíaser un par de valores delimitados por espacios en blanco, es decir:

some/path/to/file somehash

Parece que es posible que la clave/valor no coincida, porque esto hará lo que desea, suponiendo que ${md5inhex:$1}se ejecute correctamente. Lo que puedes intentar hacer, para realizar pruebas, es establecer una variable ficticia; es decir:

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

Puede usar algo como curl -I <server>/<path>para verificar que se esté configurando. Puedo verificar que al usar un RewriteMap formateado correctamente, esto configurará su información correctamente.

información relacionada