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

Posted

技术标签:

【中文标题】如果路由不在子域中,Laravel 子域路由重定向到 404【英文标题】:Laravel subdomain routing redirect to 404 if route not in subdomain 【发布时间】:2021-11-17 00:39:20 【问题描述】:

我在我的应用程序中使用子域路由,如果请求的路由在子域中不存在,我希望将子域路由的请求重定向到 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

【问题讨论】:

问题是为什么他们会被重定向到mysite.test/login开始?这不是默认行为,您在此处共享的代码中没有任何内容可以执行此操作 我相信这是默认行为,这就是为什么文档说您的子域路由应该放在主域路由之上的原因。因此,如果一个请求不匹配子域中的任何路由,它会渲染来自主域的路由(如果存在)。 【参考方案1】:

我想我找到了一个解决方案:在 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");
    );
);

【讨论】:

以上是关于如果路由不在子域中,Laravel 子域路由重定向到 404的主要内容,如果未能解决你的问题,请参考以下文章

在子域允许访问一个页面,如果试图访问其他页面重定向到主域名

我的子域路由覆盖了我在 laravel 7 中的正常网络路由

URL重写到子域

在 Laravel 中重定向域名

任何域上的 Laravel 5 子域路由

Laravel 根路由“/”在子域的前缀路由中不起作用