📜  在 laravel 中重定向 404 - PHP (1)

📅  最后修改于: 2023-12-03 14:51:00.279000             🧑  作者: Mango

在 Laravel 中重定向 404 - PHP

在 Laravel 中,通常我们可以使用 abort(404) 函数来返回一个 404 错误,但是这不会把用户重定向到 404 页面。本文将介绍如何在 Laravel 中重定向 404 错误。

方式一:使用 Middleware

我们可以创建一个 Middleware 来处理 404 错误:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class RedirectIfNotFound
{
    public function handle(Request $request, Closure $next)
    {
        $response = $next($request);

        if ($response->status() == 404) {
            return redirect('/404');
        }

        return $response;
    }
}

接着,在 App\Http\Kernel.php 文件中注册该 Middleware:

protected $routeMiddleware = [
    // ...
    'redirect.if.not.found' => \App\Http\Middleware\RedirectIfNotFound::class,
];

我们可以在需要的路由中使用该 Middleware:

Route::get('/my-page', function () {
    return view('my-page');
})->middleware('redirect.if.not.found');

当用户访问未定义的路由时,将会被重定向到 /404 页面。

方式二:使用自定义异常处理器

Laravel 还提供了一个功能强大的异常处理器,我们可以在其中添加一个 render() 方法来自定义处理 404 错误:

<?php

namespace App\Exceptions;

use Exception;

class NotFoundException extends Exception
{
    public function render($request)
    {
        return redirect('/404');
    }
}

接下来,我们需要向 Laravel 中添加自定义异常处理器。只需在 App\Exceptions\Handler.php 文件中的 $dontReport 数组中添加新的异常类:

protected $dontReport = [
    // ...
    \App\Exceptions\NotFoundException::class,
];

现在,我们只需在需要的地方抛出 App\Exceptions\NotFoundException 异常即可:

Route::get('/my-page', function () {
    if (! $myPageExists) {
        throw new \App\Exceptions\NotFoundException();
    }

    return view('my-page');
});

当用户访问未定义的路由时,将会被重定向到 /404 页面。

以上就是两种使用 Laravel 重定向 404 错误的方法,您可以根据实际情况进行选择。