Apache RewriteRule с заменой переменной RewriteMap аргумента VAL на переменную окружения

Apache RewriteRule с заменой переменной RewriteMap аргумента VAL на переменную окружения

У меня есть сервер Apache, который передает двоичные файлы приложению (не браузеру).

Приложение, делающее запрос, хочет заголовок HTTP Content-MD5 в формате HEX. По умолчанию и единственным вариантом в Apache является Base64. Если я добавлю "ContentDigest on" к своему VirtualHost, я получу этот заголовок в Base64.

Поэтому я написал скрипт на Perl, md5digesthex.pl, который выдает мне именно то, что мне нужно: MD5 в формате HEX, но мне не удается заставить свой сервер отправить результат с помощью RewriteRule.

Вот мой текущий рецепт переписывания:

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

Проблема в том, что я не могу установить переменную окружения HASH на основе вывода функции md5inhex map. Похоже, такое поведение не поддерживается, и я не знаю, как это сформулировать...

решение1

Я думаю, лучше спросить: почему вы переопределяете то, чтоRFC уже определяет? Если вы пытаетесь перегрузить заголовок Content-MD5, скорее всего, вам просто следует использовать другой заголовок. Если вы пытаетесь адаптировать это к своей программе, мне кажется, что ваша программа делает что-то неправильно и ее следует исправить.

EDIT: Итак, я посмотрел на это локально. Можете ли вы сказать мне, что выводит md5digesthex.pl? Этодолженбыть парой значений, разделенных пробелами, например:

some/path/to/file somehash

Похоже, что ключ/значение не совпадают, потому что это БУДЕТ делать то, что вы хотите, предполагая, ${md5inhex:$1}что выполняется правильно. Что вы можете попробовать сделать для тестирования, так это установить фиктивную переменную; т.е.:

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

Вы можете использовать что-то вроде, curl -I <server>/<path>чтобы проверить, что он устанавливается. Я могу проверить, что с помощью правильно отформатированного RewriteMap, это установит вашу информацию правильно.

Связанный контент