Назад | Перейти на главную страницу

Apache RewriteRule с заменой переменной RewriteMap для аргумента VAL в переменную среды

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

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

Итак, я написал сценарий perl, md5digesthex.pl, который дает мне именно то, что я хочу: MD5 в формате HEX, но я борюсь с RewriteRule, чтобы мой сервер отправил результат.

Вот мой текущий рецепт 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

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

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

РЕДАКТИРОВАТЬ: Итак, я посмотрел на это локально. Вы можете сказать мне, что выводит 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, это БУДЕТ правильно установить вашу информацию.