Как обслуживать несколько статических папок в Laravel?

У меня есть три папки со статическими файлами (приложения Angular): веб, логин, админ.

Я хочу служить:

  • web папка, когда URL-адрес /*
  • login когда URL /admin/* и не вошли
  • admin когда URL /admin/* и вошли.

мой routes.php:


// папка администратора
Route :: get ('/ admin', ['before' => 'auth', function ()
{
return File :: get (public_path (). '/admin/index.html');
}]);

Route :: get ('/ admin / {slug}', ['before' => 'auth', функция ($ slug)
{
return File :: get (public_path (). '/ admin /'. $ slug);
}]); // папка входа
Route :: get ('/ admin', function ()
{
return File :: get (public_path (). '/login/index.html');
});

Route :: get ('/ admin / {slug}', функция ($ slug)
{
return File :: get (public_path (). '/ login /'. $ slug);
}); // веб-папка
Route :: get ('/', function ()
{
return File :: get (public_path (). '/web/index.html');
});

Route :: get ('/ {slug}', функция ($ slug)
{
return File :: get (public_path (). '/ web /'. $ slug);
});

Проблемы:

  • /{slug} не обслуживает файлы из подпапок.
  • Когда я не вошел, /admin/ перенаправить меня на /login,
  • Должен быть способ написать этот маршрут с помощью регулярных выражений.

Как я могу решить предыдущие пункты?

3

Решение

  • Не знаю, в чем проблема с первым пунктом. Возможная проблема:
    • Вы вводите расширение как slug, например slug.html. В этом случае стандартный laravel htaccess пытается найти файл, который не существует. Так что Ларавел не загружен! Чтобы решить эту проблему, вы можете изменить htaccess или не использовать расширения в вашем маршруте.
  • Вы добавили один и тот же URL маршрута 2 раза. Стандарт Laravel берет один и пропускает другой. Поэтому первый админский маршрут выбран. Поэтому фильтр аутентификации всегда выполняется. В стандартном фильтре, который находится в файле 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]+');

Надеюсь это поможет!

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]