リクエストパラメータ「authorization」の値を取得して、リクエストのヘッダー「Authorization」に保存しようとしています。
最初の書き換えルールは正常に機能します。 2番目の書き換えルールでは、$ 2の値が環境変数に格納されていないようです。結果として、リクエストヘッダー「Authorization」は空です。
何か案が ?ありがとう。
<VirtualHost *:8010>
RewriteLog "/var/Apache2/logs/rewrite.log"
RewriteLogLevel 9
RewriteEngine On
RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [L,P]
RewriteRule ^/(.*)&authorization=@(.*)@(.*) - [E=AUTHORIZATION:$2,NE]
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
</VirtualHost>
パラメータがパスに含まれている場合や、クエリに含まれている場合があるため、いくつかのケースを処理する必要があります。ユーザーによって異なります。この最後のケースは失敗します。 AUTHORIZATIONのヘッダー値は空に見えます。
# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [E=AUTHORIZATION:%2,NE,L,P]
# add the value of AUTHORIZATION in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
最初のルールに「L」(最後)フラグがあるようです。ルールの処理はそこで停止し、それ以上の書き換えは行われません。 2番目のルールに到達することはないと思います。 'L'フラグを削除してみてください。
編集
ああ、あなたも「P」(プロキシ)フラグを設定しています。また、その時点で書き換えルールの処理を停止し、mod_proxyを介してプロキシリクエストを強制します。
パターンマッチは同じなので、すべてを1つのルールで実行できますか。私はあなたが何を求めているのか完全にはわかりませんが、これはかもしれませんそれをします:
RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [E=AUTHORIZATION:$2,NE,L,P]
更新
ああ、あなたが今やろうとしていることがわかると思います。フラグで[P]を指定するとすぐに、その時点でプロキシ要求が発生します。質問を正しく読んだ場合は、そのリクエストにAUTHORIZATION変数を渡す必要があるため、[P]の前にそれを入力する必要があります。
# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
RewriteRule ^/(.*) - [E=AUTHORIZATION:%2]
# add the value of AUTHORIZATION in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [NE,L,P]
完全にテストされていませんが、質問を正しく理解していれば、やりたいことを実行する必要があります。
Apache Config Update
Httpd.confのそのディレクトリにAllowOverrideFileInfoが設定されていますか?そうでない場合は、.htaccessでRequestHeaderを使用できません。
mod_rewrite
ではなくmod_setenvif
を使用している理由はありますか?
http://httpd.Apache.org/docs/current/mod/mod_setenvif.html#setenvif
Authorization
ヘッダーをオーバーライドできないか、リクエストプロセスの後半でマングルされていると思われます。ご存じのとおり、Authorization:
は HTTP基本認証 に使用されるため、他の何かがそれをいじっている可能性があります。別の名前のヘッダーを使用できますか?