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

Laravel中间件未执行redirect跳转反而返回NotFound问题排查

问题排查与修复方案

嘿,我帮你找出问题所在啦!你的中间件没执行跳转反而返回「Not Found」,主要是代码里有两个关键错误,咱们一步步拆解:

1. 路由参数调用了错误的方法

你通过$request->route('link')拿到的$uuid是路由里的字符串参数(或者null),不是Eloquent查询构建器对象,所以直接调用$uuid->first()完全是错的——这行代码会直接抛出「调用非对象方法」的错误,Laravel的错误处理可能把这个错误转化成了404页面,导致你看不到跳转逻辑执行。

正确的查询写法应该把first()放在查询构建器上:

$link = Link::where('uuid', $uuid)->first();

(where方法的第二个参数默认就是等于,所以=号可以省略,写法更简洁)

2. 没处理路由参数为空的情况

如果请求的URL没匹配到带link参数的路由,$request->route('link')会返回null。这时候即使修正了查询,也会变成查uuid为null的数据,可能不符合你的预期;甚至如果路由定义有问题,中间件根本不会运行,直接返回404。

额外要检查的点

  • 确认中间件已经正确注册到对应的路由/路由组里,不然它根本不会生效;
  • 确认路由定义正确,比如是不是Route::get('/{link}', ...)这种形式,确保link参数能被正确捕获。

最后给你修正后的完整中间件代码:

public function handle(Request $request, Closure $next) {
    $uuid = $request->route('link');
    
    // 先判断参数是否存在,避免空值查询
    if (is_null($uuid)) {
        return redirect()->away('https://www.google.com');
    }
    
    $link = Link::where('uuid', $uuid)->first();
    
    if ($link === null) {
        return redirect()->away('https://www.google.com');
    } else {
        return $next($request);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:32:30