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

Laravel路由域名配置:排除base.domain访问特定路由组

Laravel路由排除特定域名解决方案

方法一:路由参数正则约束(推荐)

直接在路由组的参数约束里排除base子域名,让路由匹配阶段就过滤掉base.domain:

Route::group([
    'domain' => '{domain}.{ltd}',
    'where' => ['domain' => '^(?!base$).+'] // 正则负前瞻,匹配非base的domain
], function() {
    // 你的路由定义
});

正则^(?!base$).+的作用是匹配任何不等于base的字符串,确保只有子域名非base时,才会进入该路由组。

方法二:优先定义特定域名路由

利用Laravel路由先定义先匹配的规则,先单独注册base.domain的专属路由组,再定义通用域名路由组:

// 先定义base.domain的专属路由
Route::group(['domain' => 'base.domain'], function() {
    // 放置base域名对应的路由
});

// 再定义其他域名的通用路由组
Route::group(['domain' => '{domain}.{ltd}'], function() {
    // 你的通用路由定义
});

当访问base.domain时,会优先匹配第一个路由组,不会触发后续的通用路由组,直接实现需求。

方法三:中间件过滤(适合复杂场景)

如果需要更灵活的域名判断逻辑,可通过中间件实现:

  1. 创建中间件:
php artisan make:middleware ExcludeBaseDomain
  1. 在app/Http/Middleware/ExcludeBaseDomain.php中编写过滤逻辑:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class ExcludeBaseDomain
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->getHost() === 'base.domain') {
            // 拒绝访问该路由组,可根据需求改为重定向或其他处理
            throw new NotFoundHttpException();
        }

        return $next($request);
    }
}
  1. 在app/Http/Kernel.php中注册中间件:
protected $routeMiddleware = [
    // 其他中间件
    'exclude.base' => \App\Http\Middleware\ExcludeBaseDomain::class,
];
  1. 在路由组中绑定该中间件:
Route::group([
    'domain' => '{domain}.{ltd}',
    'middleware' => 'exclude.base'
], function() {
    // 你的路由定义
});

内容的提问来源于stack exchange,提问作者Evg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:10:29