2014-11-08 71 views
3

我有三个文件夹与静态文件(Angular应用程序):网络,登录,管理员。如何在Laravel中提供多个静态文件夹?

我想为:

  • web文件夹时,该网址是/*
  • login当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
  • 必须有办法用正则表达式写这条路线。

我该如何解决以前的几点?

回答

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

希望这有助于!

+0

感谢您的解释。 第一点,当您引入一个从子文件夹请求文件的URL时,问题就出现了。例如: '/ admin/bootstrap.css'返回200 OK。 '/ admin/css/bootstrap.css'返回404未找到。 – cespon 2014-11-13 13:50:40