Yii ::使用Showscriptname = False和Url Manager的问题

时间:2013-04-25 21:23:02

标签: url-rewriting yii yii-components

我目前在使用URL管理器和/或apache mod_rewrite时遇到问题,或者完全不同。

如果将showScriptName设置为false,则导航到domain.com/login,domain.com/logout,domain.com/site/login等地址的行为方式都相同。它只显示主站点/索引,就好像我要导航到domain.com/eeofjew9j8jfdedfmewf(jibberish)。

也许这是我的Yii设置的问题?以下是那些(对不起):

'components'=>array(
   'urlManager'=>array(
      'urlFormat'=>'path',
      'showScriptName'=>false,
      'rules'=>array(
          '<controller:\w+>/<id:\d+>'=>'<controller>/view',
          '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
          '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
          'login'=>'site/login',
          'logout'=>'site/logout',
          'register'=>'users/register'
      ),
  ,...

以下是我在www root中设置.htaccess的方法:

RewriteEngine on

# 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

我正在使用VPS服务器,因此我具有root权限,可以对apache进行任何更改。我检查了我的phpinfo并且mod_rewrite正在运行并启用。在我的apache配置中,我有我的www目录:

AllowOverride All
Options Indexes FollowSymLinks MultiViews
Order allow,deny
Allow from all

我一直在通过3个不同的主机(godaddy,dreamhost和锂主机)来解决这个问题,所以我认为这是我的问题。既然我有VPS,我希望我能最终找出问题并解决它。

3 个答案:

答案 0 :(得分:2)

首先验证服务器是否正在解析.htaccess文件。这可以通过将随机文本放在.htaccess文件中来完成,例如

CREATE AN ERROR

如果这给您一个服务器错误,那么正在解析该文件。您可能必须将.htaccess文件移动到目录中才能使其生效。

在此工作之后检查以确保Apache中的重写模块已打开。首先检查phpinfo并查找正在运行的模块。如果不是,您可能必须删除模块前面的注释(#)字符。

模块出现在phpinfo之后,看看你是否可以进行基本的重写,以确保Apache没有问题。

RewriteEngine on
RewriteRule ^ http://google.com/? [L,R]

如果不起作用,请尝试添加

Options +SymLinksIfOwnerMatch

到文件

一旦你让Apache做了它现在的部分,它就取决于yii。这段代码:

RewriteEngine On
RewriteBase /mybasedirectory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

添加重写基本选项,如果您没有文档根目录中的文件,例如htdocs

,则可能需要该选项

最后,如果这不能解决问题,那么将规则限制为简单的规则,例如

      'contact'=>'site/contact',

并查看是否至少重定向到您认为应该的位置。当然,您可能需要再次检查.htaccess的基本规则,以确保允许覆盖并且子目录中没有错误的.htaccess。我希望有所帮助。我终于开始工作了。

答案 1 :(得分:1)

如果删除这些行会怎样?

enter code here
    # otherwise forward it to index.php
    RewriteRule . index.php

答案 2 :(得分:1)

如果添加此代码,请查看是否有效

'<action:(login|logout|register|contact)>' => 'site/<action>',