【问题标题】:Yii :: Issue Using Showscriptname = False And Url ManagerYii :: 使用 Showscriptname = False 和 Url Manager 的问题
【发布时间】:2013-04-19 22:49:15
【问题描述】:

我目前在使用 URL 管理器和/或 apache mod_rewrite 或可能完全是其他东西时遇到问题。

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

可能是我的 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 根目录中设置 .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,我希望我能最终找出我的问题并解决它。

【问题讨论】:

  • 我不知道 yii,但我以前实现过类似的东西。如果我做到了,我会切换规则键和值....

标签: url-rewriting yii yii-components


【解决方案1】:

首先验证服务器是否正在解析 .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]

添加 rewrite base 选项,如果您在文档根目录中没有文件,例如 htdocs,则可能需要此选项

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

      'contact'=>'site/contact',

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

【讨论】:

  • 接受这个作为答案,因为你的答案是最彻底的,不过,作为记录,我已经离开这个项目,并且没有站点设置来测试这个解决方案。
  • 知道运气有什么建议吗??
【解决方案2】:

如果删除这些行会发生什么!

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

【讨论】:

  • 还是一样的问题。我转移到了一个不同的项目,但实际上并没有在 Yii 中使用它!有点令人沮丧,但如果下次我在做另一个 Yii 项目时遇到同样的问题,我会告诉你的。
【解决方案3】:

如果你添加这个代码,看看它是否有效

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多