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()。)

+0

非常感谢迈克。 – 2013-03-26 18:20:26

+0

非常欢迎。 :) – 2013-03-26 19:42:27

我一直在试图将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']; 
+0

我确实通过类似的方式修复。刚刚添加会话开始start.php和使用eventlistener后听所有视图事件... – 2013-04-04 09:42:08