Apache RewriteRule mit einer RewriteMap-Variablensubstitution für das VAL-Argument der Umgebungsvariable

Apache RewriteRule mit einer RewriteMap-Variablensubstitution für das VAL-Argument der Umgebungsvariable

Ich habe einen Apache-Server, der einer Anwendung (kein Browser) Binärdateien bereitstellt.

Die Anwendung, die die Anfrage stellt, möchte den HTTP Content-MD5-Header im HEX-Format. Die standardmäßige und einzige Option in Apache ist Base64. Wenn ich meinem VirtualHost „ContentDigest on“ hinzufüge, erhalte ich diesen Header in Base64.

Also habe ich ein Perl-Skript geschrieben, md5digesthex.pl, das mir genau das gibt, was ich will: MD5 im HEX-Format, aber ich habe Probleme mit der RewriteRule, um meinen Server dazu zu bringen, das Ergebnis zu senden.

Hier ist mein aktuelles Rewrite-Rezept:

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

Das Problem ist, dass ich die HASH-Umgebungsvariable nicht basierend auf der Ausgabe der md5inhex-Map-Funktion festlegen kann. Es scheint, dass dieses Verhalten nicht unterstützt wird, und ich weiß nicht, wie ich das formulieren soll ...

Antwort1

Ich denke, die bessere Frage ist, warum Sie neu definieren, was dieRFC definiert bereits? Wenn Sie versuchen, den Content-MD5-Header zu überladen, sollten Sie wahrscheinlich einfach einen anderen Header verwenden. Wenn Sie versuchen, dies an Ihr Programm anzupassen, klingt es für mich so, als ob Ihr Programm das Falsche tut und korrigiert werden sollte.

EDIT: Ich habe mir das hier lokal angesehen. Kannst du mir sagen, was die Ausgabe von md5digesthex.pl ist? Essollenein durch Leerzeichen getrenntes Wertepaar sein, also:

some/path/to/file somehash

Es klingt, als ob Schlüssel/Wert nicht übereinstimmen, denn dies wird das gewünschte Ergebnis erzielen, vorausgesetzt, es ${md5inhex:$1}wird korrekt ausgeführt. Sie können zum Testen versuchen, eine Dummy-Variable festzulegen, z. B.:

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

Sie können etwas wie verwenden, curl -I <server>/<path>um zu überprüfen, ob es festgelegt wird. Ich kann überprüfen, ob Ihre Informationen mithilfe einer korrekt formatierten RewriteMap richtig festgelegt werden.

verwandte Informationen