首页 文章

url通过重定向重写YII问题

提问于
浏览
0

嗨,我已经开始使用Yii开发一个webapp . 我已经成功地隐藏了 index.php . 但我有2个问题 .

  • 管理员控制器 site.com/admin 正在显示admin的登录页面 . 注销后,我将重定向回索引(登录页面) .
$this->redirect('index');

虽然网址现在是 site.com/admin/index ,但我想隐藏 /index 位 . 我试过了this,但这并没有解决问题 .

  • 在管理员登录页面上,我有以下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 () {
        }
    });
});

当URL为 site.com/admin 时,此代码可正常工作,但当URL为:

  • site.com/admin/index - 注销后就可以了

  • site.com/admin/ - 尾随斜杠

javascript重定向将发送给我

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

什么是最好的方法来解决这个问题?

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>',
        ),
    ),
    
    • 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 () {
            }
        });
    });
    

相关问题