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 });
記事の内容を紹介しました。未検証です。