Apache RewriteRule 使用 RewriteMap 变量替换环境变量的 VAL 参数

Apache RewriteRule 使用 RewriteMap 变量替换环境变量的 VAL 参数

我有一个 Apache 服务器,它为应用程序(而不是浏览器)提供二进制文件。

发出请求的应用程序需要 HEX 格式的 HTTP Content-MD5 标头。Apache 中的默认且唯一选项是 Base64。如果我将“ContentDigest on”添加到我的 VirtualHost,我会以 Base64 格式获得此标头。

所以我编写了一个 perl 脚本,md5digesthex.pl,它给了我我想要的东西:十六进制格式的 MD5,但我正在努力使用 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

问题是我似乎无法根据 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,这将正确设置您的信息。

相关内容