リダイレクト(Redirect)とは、
”あるURL(ウェブページ)から別のURLにユーザーを自動的に転送することを指します。”
Web開発において、リダイレクトはブラウザがページをロードする際に
別のページに切り替えるよう指示する仕組みで、ユーザーが特定のページにアクセスした際、
ブラウザが指示に従って自動的に他のページに遷移します。
ブラウザがリダイレクトを受け取ると、Locationヘッダに提供された新たなURLを使用して
直ちに読み込みを行います。追加の往復による時間経過以外にユーザーがリダイレクトに
気が付く事はありません。
リダイレクトが行われる主な場面
リダイレクトは、以下のような場面で利用されます。
- URLの変更や統一:
- サイトの構成を変更したり、URLが変わった際、古いURLへのアクセスを
新しいURLに転送するために使われます。
例えば、example.com/old-pageにアクセスするとexample.com/new-pageに
リダイレクトされるといったケースです。
- サイトの構成を変更したり、URLが変わった際、古いURLへのアクセスを
- ログイン後のページ遷移:
- ログイン機能があるサイトで、ユーザーがログイン後にマイページやダッシュボード
などにリダイレクトするケースです。
- ログイン機能があるサイトで、ユーザーがログイン後にマイページやダッシュボード
- フォーム送信後のページ遷移:
- ユーザーがフォームを送信した後にサンクスページや確認ページに転送する場合です。
- エラーハンドリング:
- 存在しないページやアクセス権がないページにアクセスがあった場合に、
エラーページやトップページにリダイレクトする場合があります。
- 存在しないページやアクセス権がないページにアクセスがあった場合に、
リダイレクトの種類
- クライアントサイドリダイレクト:
- JavaScriptやHTMLの
<meta>タグを使用して行われるリダイレクトです。
ページが読み込まれた後、JavaScriptや<meta http-equiv="refresh">などで
他のページに遷移させます。
- JavaScriptやHTMLの
- サーバーサイドリダイレクト:
- サーバーがブラウザにリダイレクト命令を返し、ブラウザが新しいURLに
アクセスする方法です。
例えば、HTTPステータスコード「301(恒久的なリダイレクト)」や
「302(一時的なリダイレクト)」と共に新しいURLを返します。 - Laravelでの
redirect()関数もサーバーサイドリダイレクトです。
- サーバーがブラウザにリダイレクト命令を返し、ブラウザが新しいURLに
Laravelでのリダイレクト
Laravelでは、redirect()メソッドを使って簡単にリダイレクトが行えます。
たとえば、以下のように書くと、ユーザーを/homeにリダイレクトできます。
return redirect('/home');
データの流れは下記のようになります。ついでにフォワードも記載しておきます。

また、元のページに戻る場合にはredirect()->back()が便利です。
リダイレクトのメリット
- ユーザー体験の向上: 間違ったURLや非公開ページにアクセスしたとき、
自動的に正しいページやエラーページに遷移することで、スムーズなユーザー体験が
提供できます。 - SEO対応: 永続的なリダイレクト(301リダイレクト)を設定することで、
SEOを維持しつつ、検索エンジンに新しいURLを知らせることができます。
注意点
頻繁なリダイレクトや無限リダイレクトはユーザーの混乱を招くため、適切な場面で
使用することが大切です。
リダイレクトにセッションを付随させると
redirect()->back()->with()は、Laravelでリダイレクトを行い、かつセッションに一時的な
データを保存するために使われる便利なメソッドです。
これにより、
リダイレクト後のリクエストでセッションデータを使ってメッセージやデータを表示する
ことができます。
処理の詳細
redirect()->back():- ユーザーを直前のページにリダイレクトします。具体的には、
HTTP_REFERERヘッダーを
使用してユーザーがリクエストを送信した元のURLに戻ります。 - もし
HTTP_REFERERが存在しない場合、デフォルトでルートのURL(/)などに
リダイレクトされます。
- ユーザーを直前のページにリダイレクトします。具体的には、
with():- リダイレクト時に、指定したデータをセッションに保存します。
このセッションデータはフラッシュデータと呼ばれ、一時的に保存されるデータです。
フラッシュデータは1回のリクエストのみで有効で、次のリクエストで取得できますが、
もう1度リクエストが発生すると消えます。 with()の引数には、キーと値を指定します。キー名でデータを取得できるため、
通常、エラーメッセージや成功メッセージなどをリダイレクト後に表示する際に
用いられます。
- リダイレクト時に、指定したデータをセッションに保存します。
使用例
例えば、フォーム送信後にバリデーションエラーが発生した場合にエラーメッセージを表示する
処理は次のように実装できます。
use Illuminate\Http\Request;
public function store(Request $request)
{
$request->validate([
'name' => 'required|max:255',
]);
// 保存処理
// ここで何らかの処理が行われたと仮定します
// リダイレクトして成功メッセージをセッションに保存
return redirect()->back()->with('success', 'データが保存されました。');
}
上記の例では、redirect()->back()->with('success', 'データが保存されました。')によって、
元のページにリダイレクトしながらsuccessというキーでメッセージをセッションに保存しています。
Bladeテンプレートでの表示例
リダイレクト後にセッションに保存されたメッセージを表示するには、Bladeテンプレートでsession()ヘルパーを使用します。
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
このコードにより、リダイレクト後のページで一度だけ「データが保存されました。」
というメッセージが表示されます。次のリクエストではセッションから消えるため、
表示されなくなります。
複数のデータを渡す場合
with()メソッドはチェーン可能なので、複数のデータを渡すこともできます。
return redirect()->back()
->with('success', 'データが保存されました。')
->with('info', '追加の情報も表示されます。');
このように、redirect()->back()->with()を使うことで、リダイレクト後に簡単に一時的な
セッションデータを表示できるため、ユーザーにメッセージを伝えたいときやエラーメッセージを
表示したいときに役立ちます。

