You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:32:26