Laravelのルーティングでは、サブドメインの設定も可能で、ワイルドカードでも指定できます。
Sub-Domain Routing
routes.php
// {account}がワイルドカード
Route::group(['domain' => '{account}.example.com'], function()
{
Route::get('user/{id}', function($account, $id)
{
//
});
// 名前付きルート
Route::get('/login', ['as' => 'login', 'uses' => 'HomeController@login']);
});
上記の設定で、「johndoe.example.com」などに対応できるわけです。
注意点
ところが、Redirect
やForm
で名前付きルートが使えないという困ったことになります。
Redirect::route('login');
// 文字通り、{account}.example.com/login にリダイレクトされる。
Form::open(['route' => 'login']);
// <form method="POST" action="http://{account}.example.com/login" ...
ワイルドカード指定が、そのまま出力されてしまい、「johndoe.example.com」なら
「johndoe.example.com/login」ではなく、「{account}.example.com/login」にリダイレクトされてしまうわけです。
対処方法
私が試した限りでは次の対処法があります。
Redirect::route()
の第2引数にワイルドカードの値を設定する
毎回、第2引数にワイルドカードの値を指定します。
Redirect::route('login', ['account' => 'johndoe']);
// johndoe.example.com/login にリダイレクト
(結局...)名前付きルートを使わない
上記の方法では、Form::open()
に対応できてません。
Redirect::to('/login');
Form::open(['url' => '/login']);
補足
ちなみに、Prefix Routingでワイルドカードを使ったときも同じ感じです。
他に解決方法ご存じのかた、ぜひ教えてください!