【问题标题】:url rewriting issues with YII with redirection带有重定向的 YII 的 url 重写问题
【发布时间】:2014-01-08 12:11:01
【问题描述】:

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

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

    $this->redirect('index');
    

    虽然 URL 现在是 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 () {
            }
        });
    });
    

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

  1. site.com/admin/index - 注销后会变成这样
  2. site.com/admin/ - 斜杠

javascript 重定向会将我发送到

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

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

【问题讨论】:

    标签: yii url-rewriting


    【解决方案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 () {
              }
          });
      });
      

    【讨论】:

    • 对不起,我收到了Use of undefined constant Yii - assumed 'Yii'。首先,我尝试直接使用您的代码。然后我输入 hiddent 值并尝试通过 php &lt;?php echo Yii.app.createUrl('admin/adminlogin') ?&gt; 访问 createUrl,但得到了相同的错误。任何帮助,不胜感激。
    • 显然你把js和php混在一起了,我弄错了,JS createUrl依赖于一个扩展:github.com/ainsej/Yii-JSUrlManager我会编辑我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2016-06-06
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多