php-如何在Laravel中提供多个静态文件夹?

我有三个带有静态文件(Angular应用程序)的文件夹:Web,登录名,管理员.

我要服务:

> URL为/ *的Web文件夹
> URL为/ admin / *且未登录时登录
> admin(URL为/ admin / *并已记录).

我的routes.php:


    // admin folder
    Route::get('/admin', ['before' => 'auth', function()
    {
        return File::get(public_path() . '/admin/index.html');
    }]);

    Route::get('/admin/{slug}', ['before' => 'auth', function($slug)
    {
        return File::get(public_path() . '/admin/' . $slug);
    }]);


    //login folder
    Route::get('/admin', function()
    {
        return File::get(public_path() . '/login/index.html');
    });

    Route::get('/admin/{slug}', function($slug)
    {
        return File::get(public_path() . '/login/' . $slug);
    });


    // web folder
    Route::get('/', function()
    {
        return File::get(public_path() . '/web/index.html');
    });

    Route::get('/{slug}', function($slug)
    {
        return File::get(public_path() . '/web/' . $slug);
    });

问题:

> / {slug}不提供子文件夹中的文件.
>当我未登录时,/ admin /将我重定向到/ login.
>必须有一种用正则表达式编写此路由的方法.

我该如何解决以上几点?

解决方法:

>不知道您的第一点是什么问题.可能的问题:

>您将扩展名输入为slug,例如slug.html.在这种情况下,标准laravel htaccess会尝试搜索不存在的文件.所以laravel没有启动!要解决此问题,您可以更改htaccess或在路由中不使用扩展名.

>您已将相同的路线网址添加了2次. Laravel标准采用一种,而另一种则跳过.因此,将采用第一个管理路线.因此,总是执行auth过滤器.在filters.php文件中的标准过滤器中,未登录的用户将重定向到login.因此,您将被重定向到登录名.您可以通过更改过滤器或删除过滤器来解决此问题,例如在您的路线中使用此过滤器:

Route::get('/admin',function()
{
    if(Auth::check())
       return File::get(public_path() . '/admin/index.html');
    return File::get(public_path() . '/login/index.html');
});

Route::get('/admin/{slug}',function($slug)
{
    if(Auth::check())
        return File::get(public_path() . '/admin/' . $slug);
    return File::get(public_path() . '/login/' . $slug);
});

>您可以阅读here,因此可以使用正则表达式.例如-> where(‘slug’,'[A-Za-z]’);

希望这可以帮助!

上一篇:十八、React react-router4.x中:实现路由模块化、以及嵌套路由父子组件传值


下一篇:Laravel 5:使用Route :: delete删除用户记录,在RouteCollection.php中获取MethodNotAllowedHttpException