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
});

記事の内容を紹介しました。未検証です。