如果路由不在子域中,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的主要内容,如果未能解决你的问题,请参考以下文章