使用子域和域通配符在Laravel中创建路由

问题描述:

使用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命令。是否有可能在本地设置而没有与其关联的实际域名?

我以前有过类似的任务。如果你想捕捉任何域,任何格式 - 不幸的是,你不能直接在路由文件中。路由文件预计至少有一部分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); 
    } 
} 

第2行,你必须:

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

用以下内容替换它:

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

应该以后的工作。