路由参数包含斜杠,并且在新服务器中无法识别点

时间:2018-11-04 07:15:07

标签: php laravel

我在laravel应用程序中使用thephpleague/glide软件包来调整图像大小。

我写了一条下面的路由,以获取服务器上映像的widthheightpath,然后使用该程序包修改该映像并返回它。

Route::get('/showImage/{w}/{h}/{src}', [
        'as'   => 'showImage',
        'uses' => function (League\Glide\Server $server, $w, $h, $src) {
            $server->outputImage($src, ['w' => $w, 'h' => $h, 'fit' => 'crop']);
        }
    ])->where('src', '.+');

假设我请求了http://www.example.com/showImage/300/168/galleries/mypic.jpg网址。但是当galleries/mypic.jpg是正确的并且存在于服务器上时,出现了 404 not found 错误。

我在其他项目中完全使用了此路由,但是在新主机上遇到了此问题。

我认为问题出在src参数上,该参数可以包含/.符号。因为当我使用不带任何/.的字符串时,它可以工作并且可以访问src参数。

1 个答案:

答案 0 :(得分:1)

(.*)转义斜线:

Route::get('/showImage/{w}/{h}/{src}', [
            'as'   => 'showImage',
            'uses' => function (League\Glide\Server $server, $w, $h, $src) {
                $server->outputImage($src, ['w' => $w, 'h' => $h, 'fit' => 'crop']);
            }
        ])->where('src', '(.*)');

然后运行composer dump-autoload。 如果您无权使用ssh,请添加以下路由:

Route::get('/updateapp', function()
{
    system('composer dump-autoload');
    echo 'dump-autoload complete';
});

如果此命令不起作用,请在本地运行composer dump-autoload,然后使用ftp上传文件