私はなんとか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がクエリ文字列からの場合にユーザーのブラウザにmemberUuid
Cookieを設定するようにしました。そうすれば、次のリクエストでCookieが存在することを確認できます(以前は宛先サーバーにこれを実行させていました)。
これが唯一の問題ではないかもしれません(私はこれまでmod_rewriteでCookieのマッチングを行ったことがありません)。しかし、それはRewriteRule
の後方参照がまだ%2
であるためだと思います。前のRewriteCond
には括弧で囲まれた一致が1つしかないため、何も展開されません。 [E=memberUuid:%1,P]
をお試しください