2011-09-08 21 views
5

私はフレームワークを試すことができるように、私はSymfony2を使って古いプロジェクトを書き直しています。私は次の形式のURLを持っています:Symfony2でクエリ文字列を使用してURLをルーティングするにはどうすればよいですか?

/profile/{id} 

symfony2はそれをします。しかし、同じページが最初にやっによって発見されました:

/profile.php?id=12345 

をだから、誰かが古いURLを有する場合には、私はこれらのリンクをリダイレクトしたいと思います。問題は、私はこの性質のルートを捉える方法を知らないということです。私は試しました

/profile.php?id={id} 

しかし、それは動作していないようです。どうすればこのルートを設定できますか?

フォローアップ:(私は将来のバグを恐れ、それは私に非直観的であるため)は私がやる「キャッチオール」にしたくない、と私は同じのためにhtaccessを介して、それをしない希望理由。私は最良の選択肢は "/ profile.php"をコントローラに照合して、 "id"がquery-stringに存在することを確認し、それに応じてリダイレクトすることです。そうでない場合は、私は404

答えて

3

にリダイレクトされます私はここで二つのオプションを参照してください。あなたは/新しい(/プロファイルに古いスキーマ(/profile.php?id=54321)をマップ

  1. を54321)をmod_rewrite(Apacheを使用する場合)を使用します。

  2. あなたはSymfony内でマッパーを作成します。それはあなたがまだcatchedない、すべてをキャッチするパターンを指定したルートのリストの末尾に意味:(2)あなたは何をチェックする必要がありますについて


whatever: 
    pattern: /{whatever} 
    defaults: { _controller: CoreBundle:Default:whatever } 
    requirements: 
    whatever: .+ 

リクエストオブジェクトがクエリを提供します(getQueryString()など)、b/c?xyzがルート内で照合されるようなことが可能かどうかはわかりません。

+0

正しいmod_rewriteは次のようになりますか?RewriteRule^profile.php?id =(\ d +)$/profile/$ 1 [R = 301] '? –

+0

私はApache htaccess shenanigans –

+0

の専門家ではないので、これが最善の戦略であることを確認したいだけです。ここで書き直しをテストすることができます:http://martinmelin.se/rewrite-rule-tester/。私はSFでそれを処理することを好みますが。ルートは現在、モデル/ロジックの一部です。 – Raffael

関連する問題