我正在尝试将路由过滤器应用于特定网址。所以,我的文件在公共目录下:
/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
目录下。
任何帮助都会非常棒!
答案 0 :(得分:1)
那是因为你的.htaccess
文件说如果请求URI与现有文件匹配,那么就不要重写,只是按原样显示/执行文件。
所以,你有两个选择:
您可以在.htaccess
文件中创建必要的过滤器,以便某些目录始终中的文件被重写并发送到index.php
。
RewriteCond %{REQUEST_URI} ^/js/kcfinder
RewriteRule \.php$ index.php [L,QSA]
这个条件和规则集需要放在检查文件和目录的条件之上。
或者,您可以在Laravel中创建经过身份验证的路由,以手动获取和执行文件。 (建议不要使用eval()
。)
答案 1 :(得分:1)
我一直试图将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'];