
アプリケーション (ブラウザではない) にバイナリ ファイルを提供する Apache サーバーがあります。
リクエストを行うアプリケーションは、HEX 形式の HTTP Content-MD5 ヘッダーを必要とします。Apache 内のデフォルトおよび唯一のオプションは Base64 です。VirtualHost に「ContentDigest on」を追加すると、このヘッダーは Base64 で取得されます。
そこで、私は Perl スクリプト md5digesthex.pl を作成しました。これはまさに私が求めていたもの、つまり HEX 形式の MD5 を提供してくれましたが、サーバーに結果を送信させるための 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 を使用すると、情報が正しく設定されることが確認できます。