【问题标题】:Laravel route filter to specific urlLaravel 路由过滤器到特定的 url
【发布时间】:2013-03-25 22:51:32
【问题描述】:

我正在尝试将路由过滤器应用于特定的 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

目录下。

任何帮助都会非常棒!

【问题讨论】:

    标签: php routing ckeditor laravel


    【解决方案1】:

    那是因为您的.htaccess 文件表明如果请求 URI 与现有文件匹配,则不要重写,只需按原样显示/执行文件即可。

    所以,你有两个选择:

    您可以在 .htaccess 文件中创建必要的过滤器,以便特定目录中的文件始终被重写并发送到 index.php

    RewriteCond %{REQUEST_URI} ^/js/kcfinder
    RewriteRule \.php$ index.php [L,QSA]
    

    这个条件和规则集需要放在检查文件和目录的条件之上。

    或者,您可以在 Laravel 中创建经过身份验证的路由来手动获取和执行文件。 (不建议这样做,因为您必须使用eval()。)

    【讨论】:

      【解决方案2】:

      我一直在尝试将 ckfinder 集成到 Laravel 身份验证系统中,但最终发现这太费力了。这可能是可能的,但我的解决方案很简单。当我渲染 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 监听所有视图事件之后......
      猜你喜欢
      • 2014-08-19
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2015-08-30
      相关资源
      最近更新 更多