3

场景:
使用 Laravel 5.2 / Digital Ocean / Laravel Forge(在安装站点时启用通配符域)

每个用户都有自己的子域。

主域:mydomain.com
用户域:{user}.mydomain.com

向域添加了 DNS 记录(A) - * - ip address

路线:

Route::group(['domain' => '{user}.mydomain.com'], function () {
    return 'This user has a domain.';

    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

Route::get('/', function () {
    return view('pages.home');
});

问题:
每个用户子域都会跳过group domain并进入正常的Route get '/'. 所以它不会返回'This user has a domain.';。出了什么问题?

Laravel Docs 通配符子域

4

2 回答 2

2

首先,您需要删除return 'This user has a domain.';,因为它会阻止此路由user/{id}被注册。其次,尝试将默认路由添加到您的子域:

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

    Route::get('/', function ($user) {
        return "This user has a domain: $user";
    });

    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

我希望这能帮到您。

于 2016-08-01T01:05:41.640 回答
1

当你通过 Laravel Forge 创建新站点时,一定要勾选允许通配符子域选项:

Laravel Forge 新站点屏幕

然后确保使用以下选项在您的 DNS 中创建一个新的 A 记录,使用您的服务器的 IP 地址,在这种情况下,您使用的是 Digital Ocean,因此您可以像这样输入新记录:

DigitalOcean新A记录

这就是您需要做的所有事情,现在等待您的 DNS 记录更新,然后您将能够使用您的子域实现路由,如下所示:

Route::group(['domain' => '{user}.mydomain.com'], function () {
    Route::get('/', function ($user) {
        return 'You are visiting the sub-domain for user: '.$user;
    });
});

我希望这有帮助!祝你好运 :)

于 2016-08-01T01:02:43.277 回答