web-dev-qa-db-ja.com

Apache2-URL param OR cookieのいずれか存在する方から値を転送します

私はなんとかApacheを使用してURLパラメータを取り除き、それをヘッダーに詰めて別のサーバーに渡すことができました。 この質問を参照 参照用。

ここで、URLにヘッダーが存在しない場合は、Cookieからヘッダーの値を取得してこれに追加したいと思います。これが私が試したことです:

<VirtualHost *:80>
  RewriteEngine On

  RewriteCond %{QUERY_STRING} ^(.*)memberUuid=(.*)$
  RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [CO=memberUuid:%2:localhost,E=memberUuid:%2,P]

  RewriteCond %{HTTP_COOKIE} memberUuid=(.*)
  RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [E=memberUuid:%2,P]

  ProxyPreserveHost On
  ProxyPass /excluded !
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/

  Header add iv-user "%{memberUuid}e"
  RequestHeader set iv-user "%{memberUuid}e"
</VirtualHost>

memberUuidがURLに含まれている場合でもこれは機能しますが、Cookieでは機能しないようです。ブラウザにmemberUuid cookieがありますが、URLパラメータをオフのままにすると、iv-userヘッダーに空の値があります。

私も試しました([^;]+)この投稿 で推奨されている正規表現の場合。

私の過ちは、私が完全なApacheバカであることと大いに関係があると確信しています。私は完全な初心者で、それを言うのは恥ずかしくないです。教えてください!

編集

仮想ホストを更新して、Apacheがクエリ文字列からの場合にユーザーのブラウザにmemberUuidCookieを設定するようにしました。そうすれば、次のリクエストでCookieが存在することを確認できます(以前は宛先サーバーにこれを実行させていました)。

1
Samo

これが唯一の問題ではないかもしれません(私はこれまでmod_rewriteでCookieのマッチングを行ったことがありません)。しかし、それはRewriteRuleの後方参照がまだ%2であるためだと思います。前のRewriteCondには括弧で囲まれた一致が1つしかないため、何も展開されません。 [E=memberUuid:%1,P]をお試しください

2
SmallClanger