我有三个带有静态文件(Angular应用程序)的文件夹:Web,登录名,管理员.
我要服务:
> URL为/ *的Web文件夹
> 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.
>必须有一种用正则表达式编写此路由的方法.
我该如何解决以上几点?
解决方法:
>不知道您的第一点是什么问题.可能的问题:
>您将扩展名输入为slug,例如slug.html.在这种情况下,标准laravel htaccess会尝试搜索不存在的文件.所以laravel没有启动!要解决此问题,您可以更改htaccess或在路由中不使用扩展名.
>您已将相同的路线网址添加了2次. Laravel标准采用一种,而另一种则跳过.因此,将采用第一个管理路线.因此,总是执行auth过滤器.在filters.php文件中的标准过滤器中,未登录的用户将重定向到login.因此,您将被重定向到登录名.您可以通过更改过滤器或删除过滤器来解决此问题,例如在您的路线中使用此过滤器:
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]’);
希望这可以帮助!