2013-03-25 3 views
1

Я пытаюсь применить фильтр маршрутов к определенному URL-адресу. Итак, мой файл находится в общедоступном каталоге:Фильтр маршрутов Laravel для определенного URL-адреса

/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

Большое спасибо Майк. –

+0

Добро пожаловать. :) –

1

Я был на этом пути, пытаясь интегрировать ckfinder в систему Laravels auth и в конечном итоге нашел, что это слишком много усилий. Возможно, это возможно, но мое решение было простым взломом. Когда я создаю виджет Ckeditor, я устанавливаю простую старую переменную сеанса в PHP, а затем проверяю наличие сеанса var в процедуре проверки подлинности ckfinders.

// 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 для прослушивания всех событий просмотра ... –

Смежные вопросы