如何在Laravel中使用全局中间件正确地重定向?

fd3cxomn  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(141)

我创建了一个自定义中间件来重定向短网址到其他网址,我有一个URL模型,其中包含以下信息:

{
"id":1,
"original_url":"http://www.google.com",
"short_url":"http://127.0.0.1:8000/wGjxw",
"updated_at":"2023-02-08T21:05:39.000000Z",
"created_at":"2023-02-08T21:05:39.000000Z"
}

所以我创建了一个中间件

<?php

namespace App\Http\Middleware;

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

class RedirectMiddleware
{
  
    public function handle(Request $request, Closure $next)
    {     
        //dd('here'); // is not reaching this code
        $url = Url::where('short_url', $request->fullUrl())->first();                     
        if ($url) {             
            return response()->redirectTo($url->original_url);    
        }
        return $next($request);
        
    }
}

app/Http/Kernel.php

....
....

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\RedirectMiddleware::class,

...
...

但是,当我点击url http://127.0.0.1:8000/wGjxw时,我得到一个404错误,这是web.php

Route::get('/', function () {
    return view('main');
});

Route::post('/urls', [UrlsController::class, 'store'] );

这些路由是为了显示页面的形式,并为创建短网址和那些工作正常,问题是,它看起来像中间件没有注册或我不知道发生了什么,我想要的是short_url得到重定向到original_url,我该怎么办?谢谢

nafvub8i

nafvub8i1#

如果中间件方法不起作用,您可以使用以short_url为键的路由模型绑定专门为它创建一个路由。
https://laravel.com/docs/9.x/routing#customizing-the-key

Route::get('/{url:short_url}', fn (Url $url) => redirect()->away($url->original_url));
2lpgd968

2lpgd9682#

我的错误是中间件在$middlewareGroups属性中,应该在$middleware属性中,现在工作正常

相关问题