【问题标题】:Yii can't start giiYii 无法启动 gii
【发布时间】:2012-03-31 05:02:08
【问题描述】:

我正在使用 PHP Yii 框架开发网站,我现在是堆栈,我需要启动 gii,但我不能这样做。当我输入 www.example.com/index.php/gii 或 www.example.com/gii 时,它给了我这个错误:

    /gii/default/login // <- website redirects to here

    This webpage has a redirect loop
    The webpage at http://www.example.com/gii/default/login has resulted in too many redirects.
Clearing your cookies for this site or allowing third-party cookies may fix the problem. 
If not, it is possibly a server configuration issue and not a problem with your computer.

我不认为错误是因为修改了htaccess和main配置,但无论如何这里是main.php配置文件:

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            'site/page/<view:\w+>'=>'site/page',
            '<controller:\w+>/<cact:\w+>/<action:\w+>'=>'<controller>/<cact>',
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
    ),

和 .htaccess :

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

#non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule ^.*$ /index.php [L]

那你能帮帮我吗?

【问题讨论】:

    标签: php redirect frameworks yii gii


    【解决方案1】:

    检查配置文件中的 gii 模块是否存在且未注释。 如果 gii 不在那里,则应将其添加到模块数组中。

    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>***choose a password***
        ),
    ),
    

    更多关于gii的信息here

    【讨论】:

    • 它已经在 main.php 中设置好了,我可以使用 Gii,直到我将默认 url 更改为用户友好的 url
    • 对于我在第二个代码块中发布的链接,它说明了如果您使用用户友好的网址,您必须做什么。
    • 非常感谢,一切正常!再次感谢您!
    【解决方案2】:

    要使用这个路径:index.php?r=gii/default/login,你必须关闭/protected/config/main.php中的url管理器

    【讨论】:

      【解决方案3】:

      还要检查urlManagerrules。这就是我的问题:

      'components' => array(
          'urlManager' => array(
              'urlFormat' => 'path',
              'showScriptName' => false,
              'rules' => array(
                  // ...
                  // will handle `gii/default/login` uri and makes infinite redirection loop circle
                  '<controller:\w+>/<action:\w+>/<sub_action:\w+>'=>'<controller>/<action>',
                  // ...
              ),
           ),
       ),
      

      【讨论】:

        【解决方案4】:

        出现这个问题是因为 OP 的两个会话,例如 cookie PHPSESSID 有两个域 domain.site.ru 和 admin.site.ru 两个不同的会话。删除 PHPSESSID cookie 并登录 gii

        【讨论】:

          【解决方案5】:

          FelikZ mentioned 一样,这可能是因为您在使用\w+ 而不是默认\d+ 的规则中创建了第三个参数,因此将匹配“gii”作为控制器,“默认”作为操作并将“登录”作为 ID(或子操作,或提及的任何内容)。

          我的规则如下所示:

          '<controller:\w+>/<action:\w+>/<id:\w+>'=>'<controller>/<action>',
          '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
          

          解决方法是在第一条规则中添加以下内容,以使 gii 到达正确的位置:

          'gii/<controller:\w+>/<action:[\w-]+>' => 'gii/<controller>/<action>',
          

          这应该使您的整个 urlManager 配置看起来如下所示:

          'urlManager'=>array(
              'urlFormat'=>'path',
              'showScriptName'=>false,
              'rules'=>array(
                  'gii/<controller:\w+>/<action:[\w-]+>' => 'gii/<controller>/<action>',
          
                  '<controller:\w+>/<action:\w+>/<id:\w+>'=>'<controller>/<action>',
                  '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
              ),
          ),
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-18
            • 1970-01-01
            相关资源
            最近更新 更多