mod_rewriteの誤りで"bad request"
apacheの仮想ホスト設定ファイルをキレイに書き換え。いままでProxyPassとmod_rewriteでのプロクシ、それにRedirectがあちこちに混在していたのをmod_rewriteで統一しました。
でもって、まとめられる設定は正規表現をつかってなるべくまとめて行数を少なく。
ところがhttpsでリクエストを受けているある仮想ホストで、特定のリクエスト文字列があると400エラー(bad request)となる現象。なぜだと調べること数時間。
よーくみると、mod_rewriteでのRewriteCondが重複していることがわかりました。
例えばだけど、こんな感じ。
RewriteCond (hoge|fuga/(mm|ll))/? RewriteRule .* ajp://server_name:8109%{REQUEST_URI} [P,L] RewriteCond fuga/mm.* RewriteRule .* ajp://server_name:8109%{REQUEST_URI} [P,L]
書き換えフラグでlastを指定はしているんですが、rewriteの解釈が重複していると400エラーになるようです。あまり複雑なルールを書くよりは単純なのを列挙したほうがいいかもしれません。