С Laravel 5.2 я хотел бы настроить группу поддоменов подстановочных знаков, чтобы я мог зафиксировать параметр. Я попробовал это:
Route::group(['middleware' => ['header', 'web']], function () { Route::group(['domain' => '{alias}.'], function () { Route::get('alias', function($alias){ return 'Alias=' . $alias; }); }); });
Я также попробовал ['domain' => '{alias}.*']
.
Я называю этот URL: http://abc.localhost:8000/alias
и он возвращает ошибку маршрута, которая не найдена.
Моя локальная среда – localhost:8000
используя команду php artisan serve
. Возможно ли установить это локально без фактического имени домена, связанного с ним?
Раньше у меня была аналогичная задача. Если вы хотите поймать любой домен, любой формат – к сожалению, вы не можете сделать это непосредственно в файле маршрутов. Файл маршрутов ожидает, что по крайней мере одна часть URL-адреса будет предварительно определена, статическая.
То, что я закончил делать, – это создание промежуточного программного обеспечения, которое анализирует 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() {
После этого он должен работать.