
У меня есть сервер 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, это установит вашу информацию правильно.