Laravel4、複数のドメインで共通のサブドメインルーティングを使用する
タグ: Laravel4
元記事は下の通りです。
参照:Multi-TLD Routing in Laravel
内容をまとめて説明します。
例えば、sample.comとsample.org、sample.infoなど、同じサイトとして動作させることがあるとしましょう。
それだけであれば、たいして問題にはならないのでしょうが、ユーザーごとにサブドメインを振り分け、それらもまとめて、同じLaravel4によるアプリケーションで処理したい場合があるとしましょう。
思いつくのは、ルーティングのワイルドカードです。
Route::group(['domain' => '{user}.sample.*'], function()
{
...
});
ところが、うまく動かないようです。domainをルーティングで指定するのは、サブドメインの変更に対応するための機能で、ドメイン部分は固定値で指定する必要があるからです。
そこで、紹介されているアイデアは、まず、アクセスされてきたTLDを取得するヘルパーを用意し、それにより、ルーティングを切り分けるというものです。
if ( ! function_exists('get_tld'))
{
function get_tld()
{
$matches = array();
preg_match('/sample(.*)/', Request::root(), $matches);
$tld = $matches[1];
return $tld;
}
}
このヘルパーをサブドメインのルーティング中で使用します。アクセスされたURLが、なんとか.comであれば、comを、なんたら.orgであれば、orgを返します。
あとは、ルーティングの直前にこれを取得し、サブドメインルーティングの指定で、指定します。
$tld = get_tld();
Route::group(['domain'] => '{user}.sample'.$tld], function()
{
// Routes in this group
});
記事の内容を紹介しました。未検証です。