どーも!
たかぽんです!
今回はLaravelのrouteにてリダイレクトができるリダイレクトルートを触ってみようと思います!
リダイレクトとは?
リダイレクトとは、あるページへアクセスをしようとした際に、そのページではなく、別のページへアクセスし直して欲しい時なんかに使いますね!
例えば以前からあるURLに対してページを配置していたけど、新しいURLのサイトに移行した場合なんかは旧URLのページにアクセスされたら新しいURLのサイトにアクセスするようなリダイレクトをしておけば親切ですよね。
他にも、一時的にそのページをメンテナンスしたい!
といった場合に、一旦別のメンテナンスの説明を書いたページを用意して、本来のURLへアクセスされた場合にそのページにアクセス(リダイレクト)されるようにしておけばユーザーも旧にアクセスできなくなった!とかならないわけです。
Laravelのルートでリダイレクトをする
さて、それではLaravelのrouteを使ってリダイレクトをしていきます。
よくルートで見かけるのは...
Route::get(...)
Route::post(...)
だと思いますが、これと同じ要領で書くことが可能です。
Route::redirect('/original', '/other');
上記のように指定した場合、"/original"へアクセスをすると、"/other"へリダイレクトしてアクセスするように指定できます。
また、HTTPのレスポンスコードはリダイレクトの場合"302"になります。
滅多に変える必要はないと思いますが、そのHTTPレスポンスを自分の好きな値に変えることも可能です。
Route::redirect('/here', '/there', 301);
これだけです。
第三引数にて定義した値がそのままHTTPレスポンスコードとして使われます。
ではちょっと実際に触って試してみます。
リダイレクトを確認してみよう!
まず、適当にbladeファイルを二つ用意します。
僕は前の記事のために作成していたやつを適当に使うこととしますw
それぞれ"welcome.blade.php", "validation.blade.php"の二つのファイルがある前提で進めていきます。
Route::redirect('/welcome','/validation');
上記のルートのリダイレクト定義によって、"http://localhost:8000/welcome"へアクセスをしようとすると、"http://localhost:8000/validation"へリダイレクトされるようになりました。
ただページさえあればいいので、中身等はどうでも大丈夫です!
二つのbladeファイル、上記のリダイレクトルート、それぞれのページへのgetルートがあればOK!
それでは、実際にブラウザにて"http://localhost:8000/welcome"へアクセスしてみます。
確認する際は開発者ツールのNetworkをみながらするとわかりやすいのでオススメです!
ブラウザにて右クリック後、Inspect(英語版)を選択し、出てきた画面の上部からNetworkを選択すると開きます。
ちなみに、"cmd + option + i"でもデベロッパーツールを開くことが可能です。
デベロッパーツールを開いた後、"/welcome"へアクセス、すると"/validation"へリダイレクトされていることが確認できます。
レスポンスコードは特に変更していないので"welcome"へアクセスした際は"302"でリダイレクトルートでデフォルトで返される値になっています。
その後のvalidationルートでは通常のGetルートでのアクセスに成功したので、"200"になっていますね。
では次に、ちゃんとレスポンスコードを設定すると変わるのかみておこうと思います。
Route::redirect('/welcome','/validation', 301);
上記にて実行すると...?
変わっていますね!
ちなみに301は"Permanent Redirect"を表しているので、その文字通り恒久的にリダイレクトをするつもりの場合に使うと良さそうです。
逆に一時的なメンテナンス等でちょっとだけリダイレクトしたい場合などは302でデフォルトのまま使用していいでしょう。
まとめ
基本的なリダイレクトについて調べて試してみました!
じつは今のところ業務では使ったことがない(別の人が使ってたりコードはあるかもですが...)んですよね。
知識として知っておいて損はないですね!
世の中はコロナ騒ぎですが、健康に気をつけてお勉強頑張っていきましょう!
それでわ!