リクエスト文字列でProxy
http://www.example.com/hoge/?fuga
で始まるURLを別のバックエンドへProxyせよというリクエスト。
ただし、/hoge/の?で始まらないURL、つまり引数がついてないURLは別のところへProxyせよとのこと。
当初はProxyPassMatchで出きるかなとこう書いてみた。
ProxyPassMatch ^/hoge/\?fuga(.*) http://backend_a/hoge/?$1 ProxyPass /hoge/ http://backend_b/hoge/
ところがこれがうまく行かない。どうやら?以下はクエリ文字列であって、URIではないので、mod_proxyでは引っ掛けられない模様。
困ったときのmod_rewriteってことで調べてみると、ちゃんと%{QUERY_STRING}で引っ掛けることができるみたい。
以下のようなrewriteルールを作成。
RewriteEngine On RewriteCond %{REQUEST_URI} ^/hoge/ RewriteCond %{QUERY_STRING} ^(fuga.*)$ RewriteRule ^/hoge/ http://backend_a/hoge/?%1 [P] ProxyPass /hoge/ http://backend_b/hoge/
REQUEST_URIとQUERY_STRINGで引っ掛けてバックエンドへプロクシ。?以下がURIではないということを見つけるまでに少々時間がかかりました。