Laravel中如何用中间件对指定路由做域名校验与重定向?
没问题,我来帮你搞定这个Laravel域名校验和重定向的需求,咱们一步步来实现:
解决方案:Laravel中间件实现指定路由域名校验与重定向
1. 创建域名重定向中间件
首先用Artisan命令快速生成中间件文件:
php artisan make:middleware DomainRedirect
打开生成的app/Http/Middleware/DomainRedirect.php,修改handle方法,实现核心的校验与重定向逻辑:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class DomainRedirect { public function handle(Request $request, Closure $next) { // 定义目标域名和需要校验的来源域名 $targetDomain = 'one.com'; $sourceDomain = 'two.com'; // 指定需要做域名校验的路由名称列表 $protectedRoutes = ['aboutUs', 'privacy']; // 校验条件:当前域名是two.com,且访问的是指定路由 if ($request->getHost() === $sourceDomain && in_array($request->route()->getName(), $protectedRoutes)) { // 拼接目标URL,保留原路由的路径和查询参数 $targetUrl = "https://{$targetDomain}{$request->getRequestUri()}"; // 用301永久重定向(如果需要临时重定向可以改成302) return redirect()->away($targetUrl, 301); } // 不符合校验条件时,正常放行请求 return $next($request); } }
2. 注册中间件
打开app/Http/Kernel.php,在$routeMiddleware数组中给中间件添加一个可调用的别名:
protected $routeMiddleware = [ // ... 保留其他已有的中间件 'domain.redirect' => \App\Http\Middleware\DomainRedirect::class, ];
3. 给指定路由绑定中间件
修改你的路由文件(通常是routes/web.php),给aboutUs和privacy路由单独绑定中间件:
Route::get('/', ['as' => 'index', 'uses' => 'IndexController@index']); Route::get('termsAndCondition', ['as' => 'termsAndCondition', 'uses' => 'IndexController@termsAndCondition']); // 给需要校验的路由添加中间件 Route::get('aboutUs', ['as' => 'aboutUs', 'uses' => 'IndexController@aboutUs'])->middleware('domain.redirect'); Route::get('privacy', ['as' => 'privacy', 'uses' => 'IndexController@privacy'])->middleware('domain.redirect');
如果后续还有更多需要校验的路由,也可以用路由分组来简化代码:
Route::middleware('domain.redirect')->group(function () { Route::get('aboutUs', ['as' => 'aboutUs', 'uses' => 'IndexController@aboutUs']); Route::get('privacy', ['as' => 'privacy', 'uses' => 'IndexController@privacy']); });
这样设置完成后,当用户访问https://two.com/aboutUs或https://two.com/privacy时,会自动重定向到对应的https://one.com下的路由,其他路由和域名的请求不受任何影响。
内容的提问来源于stack exchange,提问作者mySun
相关产品推荐
相关产品推荐

