mabots' blog

知のレバレッジを最大化せよ (旧はてなダイアリーから移転しました。)

パラメータ(QUERY_STRING)を削除しながらapacheでrewriteするには

マニアックといえばマニアックなんですが、サイトの移転時にURLリダイレクトする際通常はパラメータを維持しながら、リダイレクトするんですが、あえて、?移行のパラメータがはいっているとまずいパターンがある。

たとえばaaa.jp/hogeに移転するとき下記のようなエラーが起きるとする。

?が指定されているとおかしくなるアプリにリダイレクトの例
aaa.jp/hoge => OK
aaa.jp/hoge? => NG
aaa.jp/hoge?bbb=999 => NG


というサイトにリダイレクトするとき、リダイレクト元のURLにパラメータがはいったりはいんなかったりするとき、結構こまりました。(rewritecondでQUERY_STRINGうんちゃらすんのかとか、(.*)\?(.*)とかでもうまく動かんし・・)
解決方法としてはマッチ先のpathの最後に「?」だけをつけると、パラメータが無視される(そうか、というばそうかです。)


そんなわけで下記のように書けば大体OK。

RewriteEngine On
RewriteRule ^(.*)$ http://aaa.jp/hoge? [R]

・・・わぉ、こいつは、シンプル。

「?がついてれば後方参照を明示的に指定しないともともとのリクエストのパラメータを渡さない。?を省略した場合、もともとのリクエストのパラメータを渡す」ということなんですかね。