繁体   English   中英

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

[英]How to serve multiple static folders in Laravel?

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

我想服务:

  • URL为/*时的web文件夹
  • login时,URL是/admin/*和未登录
  • 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
  • 必须有办法用正则表达式编写此路由。

我怎样才能解决以前的问题?

  • 不知道你的第一点是什么问题。 可能的问题:
    • 您输入一个扩展名为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); }); 
  • 你可以在这里阅读你可以使用正则表达式。 例如->where('slug', '[A-Za-z]+');

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM