환경 변수에 대한 VAL 인수를 RewriteMap 변수로 대체하는 Apache RewriteRule

환경 변수에 대한 VAL 인수를 RewriteMap 변수로 대체하는 Apache RewriteRule

브라우저가 아닌 애플리케이션에 바이너리 파일을 제공하는 Apache 서버가 있습니다.

요청하는 애플리케이션은 HEX 형식의 HTTP Content-MD5 헤더를 원합니다. Apache 내의 기본이자 유일한 옵션은 Base64입니다. VirtualHost에 "ContentDigest on"을 추가하면 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

문제는 md5inhex 맵 함수의 출력을 기반으로 HASH 환경 변수를 설정할 수 없는 것 같습니다. 이 동작은 지원되지 않는 것으로 보이며 이를 어떻게 공식화해야 할지 모르겠습니다...

답변1

내 생각에 더 좋은 질문은 왜 당신이 정의하는 바를 재정의하느냐는 것입니다.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을 사용하면 정보가 올바르게 설정된다는 것을 확인할 수 있습니다.

관련 정보