Laravel通配符子域名每个用户

3

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

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

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

向该域名添加了DNS记录(A) - * - IP地址

路由:

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文档中的通配符子域名
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) {
        //
    });
});

我希望这能对你有所帮助。


1
在使用Laravel Forge创建新站点时,请确保勾选允许通配符子域名选项:

Laravel Forge new site screen

请务必在您的 DNS 中创建一个新的 A 记录,使用以下选项,并使用您的服务器 IP 地址。在这种情况下,您正在使用 Digital Ocean,因此您应该像这样输入您的新记录:

DigitalOcean new A record

这就是你需要做的全部,现在等待你的DNS记录更新,然后你就可以使用你的子域名来实现路由,像这样:
Route::group(['domain' => '{user}.mydomain.com'], function () {
    Route::get('/', function ($user) {
        return 'You are visiting the sub-domain for user: '.$user;
    });
});

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接