2016-05-17 85 views
0

使用Laravel 5.2,我想設置一個通配子域組,以便我可以捕獲參數。我試過這個:使用子域和域通配符在Laravel中創建路由

Route::group(['middleware' => ['header', 'web']], function() { 
    Route::group(['domain' => '{alias}.'], function() { 
     Route::get('alias', function($alias){ 
      return 'Alias=' . $alias; 
     }); 
    }); 
}); 

我也試過['domain' => '{alias}.*']

我打電話給這個網址:http://abc.localhost:8000/alias,它返回找不到路由的錯誤。

我的本地環境是localhost:8000使用php artisan serve命令。是否有可能在本地設置而沒有與其關聯的實際域名?

回答

1

我以前有過類似的任務。如果你想捕捉任何域,任何格式 - 不幸的是,你不能直接在路由文件中。路由文件預計至少有一部分URL是預定義的,靜態的。

我最終什麼事做,正在創造一箇中間件解析的域名網址,並不會根據一些邏輯,如:

class DomainCheck 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $domain = parse_url($request->url(), PHP_URL_HOST); 

     // Remove www prefix if necessary 
     if (strpos($domain, 'www.') === 0) $domain = substr($domain, 4); 

     // In my case, I had a list of pre-defined, supported domains 
     foreach(Config::get('app.clients') as $client) { 
      if (in_array($domain, $client['domains'])) { 
       // From now on, every controller will be able to access 
       // current domain and its settings via $request object 
       $request->client = $client; 
       return $next($request); 
      } 
     } 

     abort(404); 
    } 
} 
1

第2行,你必須:

Route::group(['domain' => '{alias}.'], function() { 

用以下內容替換它:

Route::group(['domain' => '{alias}.localhost'], function() { 

應該以後的工作。