我有三个包含静态文件(Angular 应用程序)的文件夹:web、login、admin。

我想服务:

  • web 文件夹,当 URL 为 /*
  • login 当 URL 为 /admin/* 且未记录时
  • admin 当 URL 为 /admin/* 并记录时。

  • 我的 routes.php :

    //管理文件夹
    Route::get('/admin', ['before' => 'auth', function()
    {
    返回 File::get(public_path() .'/admin/index.html');
    }]);

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

    //登录文件夹
    Route::get('/admin', function()
    {
    返回 File::get(public_path() .'/login/index.html');
    });

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

    //网页文件夹
    路由::get('/', function()
    {
    返回 File::get(public_path() .'/web/index.html');
    });

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

    问题:
  • /{slug} 不提供来自子文件夹的文件。
  • 当我没有登录时, /admin/ 将我重定向到 /login
  • 一定有办法用正则表达式来写这个路由。

  • 如何解决前面的问题?

    最佳答案

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

  • 希望这可以帮助!

    关于php - 如何在 Laravel 中提供多个静态文件夹?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26821873/

    10-16 06:27