多域 w/ 单 Laravel 安装

Multiple Domains w/ Single Laravel Install

整理一些陈旧的、未解决的问题,并与我自己的问题保持一致。

路线文件:

echo url()->current() ."<br>";

echo request()->getHost();

Route::domain('pro.local')->group(function () {
  Route::get('/', function () {
    dd('HELLO');
  });
});

Route::group(['domain' => 'pro.local'], function() {
    dd('PRO');
});

Route::group(['domain' => 'media.local'], function() {
    dd('MEDIA');
});

Route::group(['domain' => 'software.local'], function() {
    dd('SOFTWARE');
});

Route::get('/', function () {
    return view('welcome');
});

需求与环境: 三个域 pro.local、media.local 和 software.local 都指向同一个 public 文件夹使用 MAMP PRO 5.2 和 Laravel 5.7。这是我到目前为止对项目所做的全部。

假设: 使用 Route::domainRoute::group 应该会返回 dd() 文本或 welcome 模板。

到目前为止: 我知道我正在使用的单回购设置有效,因为我已经将三个站点 运行 关闭了单回购大约 3 年,可以共享服务,但不能跨项目共享服务。话虽如此,必须通过 SSH 进入三个单独的文件夹以 运行 composer updatenpm update 是很烦人的;特别是当每个项目的 composer.jsonpackage.json 文件基本相同时...我目前使用 gulp 来移动和复制文件以保持同步。

问题:无论域如何,只有 PRO 得到回应。

它似乎跳过了 Route::domain 并选择了第一个 Route::group,正如将 dd('MEDIA') 调用移到顶部所证明的那样。

Route::group中的代码总是得到运行,因为Laravel编译各种路由定义供以后使用。因此,当 Laravel 构建路由列表时,您的 dd() 将被执行,无论您在哪个域上,都会使整个过程短路。

如果您将每个调试 dd 调用放在每个路由组内的 Route::get('/', function () {}) 中(就像您第一次使用 Route::domain('pro.local') 位一样),您会得到您期望的结果。

Route::group(['domain' => 'pro.local'], function() {
    Route::get('/', function () {
        dd('PRO');
    });
});

Route::group(['domain' => 'media.local'], function() {
    Route::get('/', function () {
        dd('MEDIA');
    });
});

Route::group(['domain' => 'software.local'], function() {
    Route::get('/', function () {
        dd('SOFTWARE');
    });
});

Route::get('/', function () {
    return view('welcome');
});

备选方案:将它们全部切换为使用 Route::domain 也最终在另一个论坛上根据发现工作。