每个用户的Laravel通配符子域

时间:2016-07-31 23:10:43

标签: php laravel dns laravel-5.2 laravel-forge

情境:
使用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 Wildcard Subdomains

2 个答案:

答案 0 :(得分:1)

  

当您通过Laravel Forge创建新网站时,请务必勾选   允许通配符子域选项:

Laravel Forge new site screen

  

然后确保使用以下内容在DNS中创建新的A记录   选项,使用您服务器的IP地址,在这种情况下您正在使用   数字海洋,所以你会输入你的新记录,如下:

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;
    });
});
  

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

答案 1 :(得分:1)

首先,您需要删除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) {
        //
    });
});

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