Laravel 5.8 + Apache — 子域配置

Laravel 5.8 + Apache — Subdomain configuration

所以基本上我的问题是关于将子域(或多个子域)路由到单个 Laravel 应用程序。 为了更详细地说明,我有多个 Route::group,我想让它们 "connect" 到特定的子域。 例如:


我已经像这样配置了我的虚拟主机:

<VirtualHost *:443>
    ServerName domain.co
    DocumentRoot /var/www/domain/public
    DirectoryIndex index.php
    [...]
</VirtualHost>

<VirtualHost *:443>
    ServerName account.domain.co
    DocumentRoot /var/www/domain/public
    DirectoryIndex index.php
    [...]
</VirtualHost>

<VirtualHost *:443>
    ServerName visual.domain.co
    DocumentRoot /var/www/domain/public
    DirectoryIndex index.php
    [...]
</VirtualHost>

如您所见,所有 DocumentRoot 都是相同的。 理论上使用前面解释的 Laravel 配置应该可以工作,但实际上 account.domain.co, visual.domain.codomain.co 都重定向到同一个应用程序,而不是它们特定的 Route::group.


这是我的应用web.php

Route::get('/', 'IndexController@index')→name('index');
[...]

Route::group([ 'domain' => 'account.domain.com', ],function() {
  Route::get('/', 'AccountController@index')→name('account.index');
  [...]
});

Route::group([ 'domain' => 'visual.domain.com', ],function() {
  Route::get('/', 'VisualController@index')→name('visual.index');
  [...]
});

我的配置是:PHP 7.3Debian 8 (jessie)Apache 2.4.10Laravel 5.8

您正在定义 Route::groups 而没有调用它们。 对于这个例子,您可能根本不需要这些组; documentation 不清楚这一点。我把它们包括在内,因为它不会伤害任何东西。

前两个用于默认域访问方法(替换第一个路由 get('/'),​​这是您的代码中唯一采用的方法)。

Route::domain('www.domain.com')->group(function() {
get('/', 'IndexController@index')->name('index');
})};

Route::domain('domain.com')->group(function() {
get('/', 'IndexController@index')->name('index');
})};

Route::domain('account.domain.com')->group(function() {
  Route::get('/', 'AccountController@index')->name('account.index');
})};

Route::domain('visual.domain.com')->group(function() {
  Route::get('/', 'VisualController@index')->name('visual.index');
})};
//...