Laravel 5.6-如何实现404页面/路由

时间:2018-07-10 12:51:38

标签: laravel laravel-5.6

我正在尝试实现404页面,但到目前为止没有任何反应。我得到这个:

Not Found

The requested URL /test was not found on this server.

我有一个自定义的 404 页面,其中的文字完全不同。

在我的路线文件中,我具有以下路线:

Route::fallback(function(){
    return response()->view('errors/404', [], 404);
});

Handler.php 中,我添加了以下内容:

/**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        if ($exception instanceof MethodNotAllowedHttpException)
            abort(404);

        if ($this->isHttpException($exception)) {
            if ($exception->getStatusCode() == 404) {
                return response()->view('errors.404', [], 404);
            }
        }


        return parent::render($request, $exception);
    }

404.blade.php 位于资源/视图/错误

3 个答案:

答案 0 :(得分:1)

404.blade.php 文件应位于资源/视图/错误下(在视图中注意“ s”)。而且您在路由和Handler.php文件中不需要自定义代码,Laravel可以自己处理404。

答案 1 :(得分:0)

错误消息

Not Found

The requested URL /test was not found on this server.

是默认服务器404错误消息,不是来自Laravel。

当您不配置自定义错误页面时,应该看到Laravel的默认错误页面。 这意味着您可能没有在服务器上正确配置重写,而Laravel没有收到请求。

您可以在how to enable mod_rewrite on apache

上查看此信息

答案 2 :(得分:0)

在handler.php导入中

use Illuminate\Session\TokenMismatchException;

并编辑render()函数以遵循

public function render($request, Exception $exception)
    {
        if ($exception instanceof TokenMismatchException) {
            if ($request->expectsJson()) {
                return response()->json([
                    'dismiss' => __('Session expired due to inactivity. Please reload page'),
                ]);
            }
            else{
                return redirect()->back()->with(['dismiss'=>__('Session expired due to inactivity. Please try again')]);
            }
        }
        elseif($exception->getStatusCode()!=422){
            return response()->view('errors.404');
        }
        return parent::render($request, $exception);
    }

这是在出现任何错误时将您重定向到404页面的方式。 TokenMismatchException是会话到期,状态代码422是验证错误。 $ request-> expectsJson()用于ajax json进程