Laravel路由筛选器到特定的网址
我试图将路由筛选器应用到特定的网址。所以,我的文件是公开的目录下:Laravel路由筛选器到特定的网址
/public/js/kcfinder/browse.php
我的过滤器:
Route::filter('admin', function()
{
if (!Sentry::check())
{
// if not logged in, redirect to login
return Redirect::to_route('admin_login');
}
elseif (!Sentry::user()->has_access('is_admin'))
{
//logout
Sentry::logout();
// has no access
return View::make('error.access_error');
}
});
最后我的模式:
Route::filter('pattern: js/kcfinder/*', 'admin');
如果我尝试访问
/public/js/kcfinder/browse.php
的规则不起作用。
我可以看到文件的全部内容。
如果我尝试接取
/public/js/kcfinder/blahblah.php
过滤器的伟大工程。因为没有名为
blahblah.php
下的目录。
任何帮助都会非常棒!
这是因为您的.htaccess
文件说如果请求URI与现有文件匹配,那么不要重写,只是按照原样显示/执行该文件。
所以,你有两个选择:
您可以在.htaccess
文件创造必要的过滤器,以便在某些目录文件总是得到改写并发送至index.php
。
RewriteCond %{REQUEST_URI} ^/js/kcfinder
RewriteRule \.php$ index.php [L,QSA]
这个条件和规则集需要放在检查文件和目录的条件之上。
或者,您可以在Laravel中手动获取并执行文件来创建经过身份验证的路由。 (这是不推荐的,因为你将不得不使用eval()
。)
我一直在试图将ckfinder集成到Laravels auth系统中,并最终发现它太费事。这可能是可能的,但我的解决方案很简单。当我渲染Ckeditor小部件时,我在PHP中设置了一个普通的旧会话变量,然后检查ckfinders auth check例程中是否存在会话变量。
// When rendering widget
session_start();
$_SESSION['enable_ckeditor'] = true;
// In ckfinder somewhere
session_start();
return isset($_SESSION['enable_ckeditor']) ?: $_SESSION['enable_ckeditor'];
我确实通过类似的方式修复。刚刚添加会话开始start.php和使用eventlistener后听所有视图事件... – 2013-04-04 09:42:08
非常感谢迈克。 – 2013-03-26 18:20:26
非常欢迎。 :) – 2013-03-26 19:42:27