使用子域和域通配符在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() {
应该以后的工作。