url通过重定向重写YII问题

时间:2014-01-08 12:11:01

标签: yii url-rewriting

您好我已经开始使用Yii开发Web应用程序了。我已经成功隐藏了index.php。 但我有两个问题。

  1. 管理员控制器site.com/admin正在显示admin的登录页面。 注销后,我将重定向回索引(登录页面)。

    $this->redirect('index');
    

    虽然网址现在为site.com/admin/index,但我想隐藏/index位。我尝试了this,但这无法解决问题。

  2. 在管理员登录页面上,我有以下javascript代码

    $("#superlogin").click(function () {
        $.ajax({
            url: "index.php/admin/adminlogin",
            data: $("#adminlogin").serialize(),
            method: "post",
            success: function (data) {
                if (data !== "failure") {
                    window.location.href = "admin/admindashboard";
                }
                else {
                    alert("Please check username and password");
                }
            },
            failure: function () {
            }
        });
    });
    
  3. 当URL为site.com/admin但URL为:

    时,此代码可以正常工作
    1. site.com/admin/index - 退出后就可以了。
    2. site.com/admin/ - 尾随斜线
    3. javascript重定向会将我发送给

      在两种情况下都是{p> site.com/admin/index.php/admin/adminlogin而不是site.com/index.php/admin/adminlogin

      最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

  1. 有几种方法可以实现这一目标,但最简单的方法可能是将您的重定向更改为:

    $this->redirect('/admin');
    

    如果你在路线上转发这个,那就更好了。这样,如果配置发生变化,您不必更改任何硬编码链接。

    $this->redirect($this->createUrl("admin/index"));
    

    然后强制执行admin / index总是重写为admin,你可以在urlManager(在配置中)

    执行此操作
    'urlManager' => array(
        'showScriptName' => false,
        'urlFormat' => 'path',
        'rules' => array(
            'admin/index' => 'admin',
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        ),
    ),
    
  2. Yii中创建正确URL的最佳方法始终是回到createUrl函数,即使在JavaScript中也是如此。

    //Yii.app.createUrl('controller/action');
    //relies on https://github.com/ainsej/Yii-JSUrlManager
    $("#superlogin").click(function () {
        $.ajax({
            url: '<?= Yii::app()->createUrl('admin/adminlogin); ?>',
            data: $("#adminlogin").serialize(),
            method: "post",
            success: function (data) {
                if (data !== "failure") {
                    window.location.href = '<?= Yii::app()->createUrl('admin/admindashboard); ?>';
                }
                else {
                    alert("Please check username and password");
                }
            },
            failure: function () {
            }
        });
    });