【问题标题】:CakePHP 2.x: How can I overwrite an URL pointing to the index page?CakePHP 2.x:如何覆盖指向索引页的 URL?
【发布时间】:2016-03-17 12:42:28
【问题描述】:

我遇到了这个问题:

Router::connect('/',array('controller' => 'Controller','action' => 'login'));

这会将www.mysite/controller/login 显示为网站网址

我想只用www.mysite.com 覆盖www.mysite.com/controller/login,但仍会转到登录页面。有谁知道如何用 Cake 2.x 做到这一点?

【问题讨论】:

    标签: url cakephp indexing routing cakephp-2.x


    【解决方案1】:

    行为与你描述的不完全一样。

    以下内容的作用:

    Router::connect('/',array('controller' => 'Controller','action' => 'login'));
    

    允许您在浏览器中输入www.mysite.com,并获得www.mysite.com/controller/login 呈现的视图。

    它的工作方式类似于 url 重写,而不是重定向。因此,上述内容应按预期工作。但是,如果它不是示例,请尝试以不同的方式命名您的控制器,因为这可能会导致 CakePHP 出现问题。

    【讨论】:

    • 谢谢。你知道我该如何重写网址吗?
    • 如前所述,URL 重写是默认设置。如果您需要重定向,请在您的操作中调用$this->redirect()
    • 我不需要重定向。我只需要在不使用任何 JS 的情况下从 URL 栏中“隐藏”“/controller/login”
    • 如果你加载了Auth组件,这可能是原因
    • 那么这就是预期的行为。您可以修改loginAction 以指向/。见docs
    【解决方案2】:

    正如 Inigo Router::connect() 所说,只是将路由/URL 连接到控制器操作。因此,使用您定义的路线,您应该能够转到 www.mysite.com 并且您的登录操作将被提供(尽管我不确定将基本 URL 用作登录页面是否是一个好主意)。

    它不会阻止 www.mysite.com/controller/login 工作,因为这是 CakePHP 的默认路由之一。

    要禁用默认路由,您需要从 routes.php 中删除此行:-

    require CAKE . 'Config' . DS . 'routes.php';
    

    请注意,如果您删除此行,您必须在应用的路由文件中为所有页面定义路由。这不一定是坏事,Beware the Route to Evil 是一本很好的读物。

    【讨论】:

      【解决方案3】:

      当我使用“Auth”组件时,我必须在函数中添加

      beforeFilter()

      我的控制器这一行:

      $this->Auth->allow('anAction', 'anotherAction', '**login**');

      【讨论】:

        猜你喜欢
        • 2016-12-21
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        • 1970-01-01
        • 2016-10-24
        • 2012-07-15
        相关资源
        最近更新 更多