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

时间:2014-11-08 20:43:22

标签: php laravel static routes

我有三个带静态文件的文件夹(Angular apps):web,login,admin。

我想服务:

    当网址为web 时,
  • /*文件夹 当网址为login且未记录
  • 时,
  • /admin/* 当网址为admin并已记录时,
  • /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
  • 必须有办法用正则表达式编写此路线。

我如何解决以前的问题?

1 个答案:

答案 0 :(得分:3)

  • 不知道你的第一点是什么问题。可能的问题:
    • 您输入了一个扩展名为slug,例如slug.html。在这种情况下,标准的laravel htaccess会尝试搜索不存在的文件。所以laravel没有启动!要解决此问题,您可以更改htaccess或在您的路线中不使用扩展程序。
  • 您已添加相同的路由网址2次。 Laravel标准采用一个并跳过另一个。因此,采用第一个管理路由。因此,auth过滤器始终有效。在标准过滤器(位于filters.php文件中)中,未登录的用户被重定向到登录。因此,您已重定向到登录状态。您可以通过更改过滤器或删除过滤器来解决此问题,并在您的路线中使用此功能:

    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]+');

希望这有帮助!