Laravel 如果路由不在子域中,子域路由重定向到 404

Laravel subdomain routing redirect to 404 if route not in subdomain

我在我的应用程序中使用子域路由,如果请求的路由在子域中不存在,我希望将对子域路由的请求重定向到 404 页面。这是场景:

// Subdomain routes
Route::domain('app.mysite.test')->group(function(){
    Route::get('/', function(){
        dd("Home page for subdomain");
    });

    Route::get('/404', function(){
        dd("Subdomain 404");
    });
    //... other subdomain routes here
});

// Top domain routes
Route::group(['namespace' => 'Site'], function(){
    Route::get('/', function(){
        dd("Main site home page");
    });

    Route::get('/login', function(){
        dd("Main site LOGIN page");
    });
});

在上述场景中,如果有人试图访问子域中不存在的路由(例如http://app.mysite.test/login),他们将被自动重定向到主站点的登录页面(即:http://mysite.test/login).

我的问题是:如果用户尝试访问 http://app.mysite.test/login,我如何将他们重定向到 http://app.mysite.test/404

我想我找到了一个解决方案:在 Subddomain 路由组的末尾,添加一个 catchall 表达式,基本上捕获所有不在子域路由中的内容并呈现 404 页面。确保此 catchall 路由位于子域路由的末尾:

// Subdomain routes
Route::domain('app.mysite.test')->group(function(){
    Route::get('/', function(){
        dd("Home page for subdomain");
    });

    //Route::get('/404', function(){
    //    dd("Subdomain 404");
    //});
    //... other subdomain routes here

    // ADD THE CATCHALL REGEX HERE
    Route::get("{catchall}", function(){
        dd("404 page from subdomain");
    })->where('catchall', '(.*)');
});

// Top domain routes
Route::group(['namespace' => 'Site'], function(){
    Route::get('/', function(){
        dd("Main site home page");
    });

    Route::get('/login', function(){
        dd("Main site LOGIN page");
    });
});