LoginSignup
0
0

More than 1 year has passed since last update.

Laravel 6.x リダイレクト時にクエリパラメータを引き継ぐ

Posted at

やりたいこと

サービスをスタートしてからパスの構造を整理したりして、コンテンツを引っ越した時に、Laravelにはリダイレクトルートという便利な機能があり、

Route::redirect('/old/path', '/new/path');

Route::permanentRedirect('/old/path', '/new/path');

のように記述して301、302のリダイレクトを行うことができます。こうしておけば旧パスでコンテンツをブックマークしている人にも404を返さなくてすみます。便利。

ただ、このredirectpermanentRedirectはクエリパラメータを引き継いでくれないようで、例えば

http://your.domain/old/path?param=hello

のようなURIにアクセスされても

http://your.domain/new/path

にリダイレクトされてしまいます。パラメータを捨てられてしまうと動的なコンテンツはまともに生成できなくなってしまったりするので困ります。なんとか引越し先にパラメータを持っていきたい。

解決方法

以下のようにリダイレクトルートを記述すればクエリパラメータを引き継ぐことができます。

Route::redirect('/old/path', '/new/path?' . Arr::query(request()->query()));

permanentRedirectでも同じです。単純にヘルパを用いてクエリストリングを新しいパスに追加しているだけです。

この方法でルートキャッシュも問題なく生成されるようでした。このようなサービスイン後のコンテンツのお引越しは多くはないとはいえ無いわけではないので、もしかしたらもっと単純な方法があるのではないか?という気もします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0