mod_rewriteと〜
ブラウザの種別によって、mod_rewriteでにRewriteRuleを変更したい。
具体的にはHTTP_USER_AGENTが一定文字列に一致した場合に、RewriteRuleでプロクシしている先を変更したい。ってことでこんな風に書いてみました。
RewriteCond %{REQUEST_URI} "/hogefuga" RewriteCond %{REQUEST_URI} !"/hogefuga/except" <If "%HTTP_USER_AGENT} = 'hogehoge'"> RewriteRule .* http://server_hoge%{REQUEST_URI} [P,L] </If> <Else> RewriteRule .* http://server_other%{REQUEST_URI} [P,L] </Else>
なんかうまくいきそうじゃないですか。
ところがですよ、RewriteCondとRewriteRuleの間になにかコメント以外の行があると、RewriteCondで指定した条件がRewriteRuleにひっかからない。
上記の例だと、無条件ですべてのリクエストが指定したバックエンド側サーバへプロクシされる。
もちろんこうかけばちゃんと期待される動作を得られることは解っているのですが。
RewirteCond &{HTTP_USER_AGENT} "hogafuga" RewriteCond %{REQUEST_URI} "/hogefuga" RewriteCond %{REQUEST_URI} !"/hogefuga/except" RewriteRule .* http://server_hoge%{REQUEST_URI} [P,L] RewirteCond &{HTTP_USER_AGENT} !"hogafuga" RewriteCond %{REQUEST_URI} "/hogefuga" RewriteCond %{REQUEST_URI} !"/hogefuga/except" RewriteRule .* http://server_other%{REQUEST_URI} [P,L]
とっても冗長じゃないですか。同じ文字列が何度もでるのは変だ。
うーんなにかいい方法ないかな。