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

Laravel路由正则表达式应用:遗留路由转404最佳实践

嘿,这个需求用Laravel的路由正则约束完全可以搞定,而且是非常简洁高效的最佳方案!我来给你拆解具体实现步骤:

最佳实践:正则匹配+全局404拦截
  • 核心实现:添加兜底路由
    在你的routes/web.php(如果是接口路由就用routes/api.php)末尾添加以下代码:

    Route::get('/{any}', function () {
        abort(404);
    })->where('any', '^(admin|user).*$');
    

    这段代码的作用:

    • {any} 是路由参数,用来捕获所有符合规则的路径
    • where('any', '^(admin|user).*$') 是正则约束:^ 匹配路径开头,(admin|user) 指定要拦截的前缀,.* 匹配前缀后面的任意字符,$ 匹配路径结尾
    • abort(404) 直接抛出404异常,Laravel会自动渲染默认或你自定义的404页面
  • 关键注意事项:路由顺序
    一定要把这个兜底路由放在所有其他路由的最后!因为Laravel是按路由定义的顺序依次匹配的,如果把它放在前面,会直接拦截掉你本来想保留的正常路由(比如如果有非遗留的/admin开头路由)。

  • 拦截所有HTTP方法(可选)
    如果你需要拦截POST、PUT、DELETE等其他方法的遗留路由,把Route::get换成Route::any来匹配所有HTTP方法:

    Route::any('/{any}', function () {
        abort(404);
    })->where('any', '^(admin|user).*$');
    

    或者更严谨地指定需要拦截的方法:

    Route::match(['get', 'post', 'put', 'delete'], '/{any}', function () {
        abort(404);
    })->where('any', '^(admin|user).*$');
    
  • 自定义404页面(可选)
    如果你想让404页面更贴合你的项目风格,只需要在resources/views/errors/404.blade.php创建对应的视图文件,Laravel会自动优先加载这个自定义视图。

这种方案的优势在于:完全利用Laravel原生路由机制实现,不需要额外编写中间件,代码简洁易维护,而且正则表达式的灵活性可以让你轻松调整拦截规则(比如后续要加其他前缀,直接修改正则里的分组即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:24