symfonyのredirectではまりまくり

俺の設計が悪いの?
symfonyでsfAction::redirect($url,$statuscode);を呼ぶ場合、
redirect(“module/action?param1=value1&param2=&value2);
みたいなものは、module/action/param1/value1/param2/value2のようにurlが置換されてリダイレクトされる。この手のフレームワークではクエリストリングを隠すのはよくある話。

OpenIDの認証をちょっと作ってたんだけど、formでPOSTしてもらって、
redirect(“openid/auth?openid=www.hatena.ne.jp/makoto_kw/”);
とかすると
urlはopenid/auth/openid/www.hatena.ne.jp/makoto_kw/になって、これにアクセスするとコントローラが、module=openid, action=auth, openid=www.hatena.ne.jp, makotokw=” みたいにおそらく分解されて意図通りに動かない。

そんなことあたりまえだから、urlencodeするわけだけど、それでもだめで、sfWebController.class.phpをみると中でurlを置換する際にurldecodeされてしまっている。

symfonyでよくあるトラブル
を参考に、routingを定義してarray渡ししたら”/”は何とかなったんだが、”.”があるとroutingが適応されなくなる。。。何なんだいったい。

今回はurlだから/を含むことは想定できるけど、ユーザに任意の文字列を入力させるとき、formの入力をhttp_build_queryとかでredirectのurlに指定したら、ユーザが”/”を入力するだけで意図しない動作になっちゃう気がする。

あんまりクエリストリングつけてredirectするなってことなんかな。

もーいーよー。header Locationで。