2013-03-25 53 views
1

我試圖將路由篩選器應用到特定的網址。所以,我的文件是公開的目錄下: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 

下的目錄。

任何幫助都會非常棒!

回答

1

這是因爲您的.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

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']; 
+0

我確實通過類似的方式修復。剛剛添加會話開始start.php和使用eventlistener後聽所有視圖事件... – 2013-04-04 09:42:08