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

Laravel中如何通过全局中间件实现短URL正确重定向?

解决短URL重定向404问题的步骤

1. 添加兜底路由

当前web.php中没有匹配/wGjxw这类短路径的路由,Laravel会直接返回404,导致中间件根本没机会执行。需要在web.php末尾添加一条匹配所有未定义GET请求的兜底路由,确保请求能进入应用流程:

// 放在web.php最后,保证其他路由优先匹配
Route::get('/{any}', function () {
    // 无需额外逻辑,仅用于让请求流转到中间件处理
})->where('any', '.*');

2. 优化中间件查询逻辑

你当前存储的short_url是完整全路径(如http://127.0.0.1:8000/wGjxw),这会导致域名或环境变化时匹配失败。建议改为存储相对路径(如/wGjxw),同时调整中间件的查询方式:

调整后的中间件代码

<?php

namespace App\Http\Middleware;

use App\Models\Url;
use Closure;
use Illuminate\Http\Request;

class RedirectMiddleware
{  
    public function handle(Request $request, Closure $next)
    {     
        // 用请求的相对路径查询,替代全URL匹配
        $url = Url::where('short_url', $request->path())->first();                     
        if ($url) {              
            return redirect()->to($url->original_url);    
        }
        return $next($request);
    }
}

同步修正数据存储逻辑

生成短URL时,仅存储相对路径部分(如生成wGjxw后,存储/wGjxw)。若已有旧数据,可通过SQL批量更新:

UPDATE urls SET short_url = SUBSTRING(short_url, LOCATE('/', short_url, 8));

(该SQL适用于HTTP协议的URL,会截取域名后的相对路径)

3. 确认中间件注册正确性

确保中间件已添加到app/Http/Kernel.php的web中间件组中:

protected $middlewareGroups = [
    'web' => [
        // 其他已注册中间件...
        \App\Http\Middleware\RedirectMiddleware::class,
    ],
];

验证效果

现在访问http://127.0.0.1:8000/wGjxw时,请求会先匹配兜底路由,进入中间件查询对应Url记录,找到后自动重定向至原URL;若未找到对应记录,会继续执行后续流程,可按需返回自定义404页面。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:41:29