我创建了一个自定义中间件来重定向短网址到其他网址,我有一个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,我该怎么办?谢谢
2条答案
按热度按时间nafvub8i1#
如果中间件方法不起作用,您可以使用以short_url为键的路由模型绑定专门为它创建一个路由。
https://laravel.com/docs/9.x/routing#customizing-the-key
2lpgd9682#
我的错误是中间件在
$middlewareGroups
属性中,应该在$middleware
属性中,现在工作正常