2014-11-08 33 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

相關問題