web-dev-qa-db-ja.com

Apache2-mod_rewrite:RequestHeaderと環境変数

リクエストパラメータ「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"
1
Guillaume

最初のルールに「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を使用できません。

1
CK.

mod_rewriteではなくmod_setenvifを使用している理由はありますか?

http://httpd.Apache.org/docs/current/mod/mod_setenvif.html#setenvif

0
pjmorse

Authorizationヘッダーをオーバーライドできないか、リクエストプロセスの後半でマングルされていると思われます。ご存じのとおり、Authorization:HTTP基本認証 に使用されるため、他の何かがそれをいじっている可能性があります。別の名前のヘッダーを使用できますか?

0
markdrayton