【问题标题】:Laravel does not throw 404 when route ends with .php当路由以 .php 结尾时,Laravel 不会抛出 404
【发布时间】:2018-06-26 02:10:59
【问题描述】:

我将 Laravel 5.5 与 NGINX 1.10.3 和 Varnish 5 结合使用。

每次我输入一个不存在的路由时,laravel 都会抛出一个404 异常并显示我的自定义resources/views/errors/404.blade.php

问题是,当我将.php 附加到不存在的路由时,我得到了一个

File not found.

来自 NGINX 的消息。即使.php 附加到不存在的路线,如何显示我的自定义404.blade.php

也许我应该重写清漆 VCL 以切断尾随的 .php,然后将请求传递给后端 (NGINX)?

【问题讨论】:

  • 你能展示一下你的 nginx 和 varnish 配置吗?
  • 为什么你希望你的路由以 .php 结尾?

标签: php laravel nginx laravel-5.5 varnish


【解决方案1】:

您的 PHP 脚本处理程序位置应如下所示,以实现您想要的:

location ~ \.php$ {
    try_files  $uri /index.php =404;
    ...
}

try_files 在此处通过 Laravel index.php 处理程序路由对不存在的 .php 脚本的请求至关重要(这将发挥其未发现的魔力)。

【讨论】:

    【解决方案2】:

    在你的 app/Exceptions/Handler.php

    public function render($request, Exception $exception)
        {
    
    
            if($this->isHttpException($exception)){
                    switch ($exception->getStatusCode()) {
                        case 400:
                            return redirect('/');
                        case 404:
                            return view('errors.404');  // your 404 error page
                            break;
                    }
            } 
            return parent::render($request, $exception);
        }
    

    【讨论】:

    • 它不起作用。对于“正常”404,是的 - 但问题是 laravel 不理解最后的 .php 并将请求委托给 NGINX。
    猜你喜欢
    • 2019-01-24
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2019-04-25
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多