RewriteRuleのパターンにquery stringやfragmentは使えない

会社の同僚がハマってて、首を突っ込んだら自分もハマったのでメモ。


ApacheのRewriteRuleのパターンではquery stringやfragment*1は引っ掛けられないらしい。
query stringはパターンに引っ掛けて処理することができない制約がある。ただし、受け取ったquery stringを置換後のURLにそのままくっつけてやることはできる(できないと困る)。
fragmentはそもそもブラウザがサーバに送らないという罠。

hoge.php?foo=123&bar=456

とかいうURLを

hoge.php/123/456

というように変換してredirectやproxy処理したい場合はどうすればいいんだろう。
結局、間にひとつプログラムをかますことで対処したようだけど。

fragmentについては、

hoge.php?foo#bar

というURLをリダイレクトするときに#barを取り除きたかったんだけど、どうしてもリダイレクト後のURLにも#barがくっついてしまう。

*1:#hogeとかってやつ