2012-03-14 66 views
4

我正在用PHP Yii Framework开发网站,我现在是堆栈,我需要启动gii,但是我不能这样做。当我键入www.example.com/index.php/gii或www.example.com/gii它给了我这个错误:Yii无法启动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.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] 

所以你能帮助我吗?

回答

4

检查配置文件中的gii模块是否存在并且未注释。 如果gii不在那里,你应该在模块数组中添加它。对于GII here

+0

这是准备好的设置在main.php中,我能够使用Gii,直到我将默认网址更改为用户友好的URL – Irakli 2012-03-14 18:21:43

+1

我在第二块代码中发布的链接表明如果您使用用户友好的网址,您必须执行的操作。 – 2012-03-14 18:24:39

+0

非常感谢,一切正常!再次感谢你! – Irakli 2012-03-14 18:40:04

6

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

更多信息要使用此路径:index.php?r=gii/default/login,你必须关闭网址经理/protected/config/main.php

5

还要检查urlManagerrules。这是这个问题对我来说:发生是因为OP的两会

'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>', 
      // ... 
     ), 
    ), 
), 
1

这个问题,例如饼干PHPSESSID有两个域域.site.ru和admin.site.ru两个不同的会话。删除PHPSESSID饼干,登录到GII

+0

这解决了我的问题 – 2015-05-12 00:40:56

4

FelikZ mentioned,这可能是因为你已经创建了一个使用\w+,而不是默认\d+,因此将匹配“GII”作为控制器的规则第三PARAM,“默认”为动作和“登录”作为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>', 
    ), 
),