Yii框架:在子目录中使用htaccess不能在Hostgator上工作

时间:2013-10-11 13:19:14

标签: apache .htaccess mod-rewrite yii

  • 我正在尝试将Yii站点设置为从子目录加载到根域。在我的根站点文件夹中,我只有root .htaccess 文件和子目录“ subdir ”,其中包含Yii站点。我找到了适合我当地环境的解决方案:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) subdir/index.php/$1 [QSA,L]
    

但是当我将网站上传到HostGator时,它无法正常工作 例如

如果我在本地环境中使用http://localhost/contact,则会打开正确的页面(称为站点/联系人 - 站点控制器和联系人操作。我已添加Yii'联系人'=>'站点/联系人'规则到urlManager,因此http://localhost/contacthttp://localhost/site/contact都可以工作)

如果我在HostGator上使用http://mydomain.com/contact或(http://mydomain.com/site/contact),我会得到默认索引页面(称为站点/索引 - 站点控制器和默认索引操作)

当我选择像http://mydomain.com/subdir/contact那样直接访问子网站时,它可以正常工作,但如果我使用http://mydomain.com/contact

则无效

我想我需要以某种方式改变htaccess中的最后一条规则,但不确定如何。谢谢!

3 个答案:

答案 0 :(得分:1)

我找到了可行的替代解决方案。我被迫使用旧式URL而不是路径,因此我将urlManager更改为:

'urlManager'=>array(
                        //'urlFormat'=>'path',
                        'showScriptName'=>true,
                        'caseSensitive'=>false,
                        'rules'=>array(
                          ...
                         )
                    )

我的root htaccess现在看起来像这样:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/index.php?r=$1 [QSA,L]

所以,访问时

http://mydomain.com/site/contact

实际映射的网址是

http://mydomain.com/subdir/index.php?r=site/contact

结果返回正确的联系页面

答案 1 :(得分:0)

因为,您在上一个问题中表示www.mysite.com/mysite/frontend/www/controller/action工作正常;你应该使用:

AddHandler application/x-httpd-php53s .php .html

Options +SymLinksIfOwnerMatch
IndexIgnore */*

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{HTTP_HOST} ^(www.)?mysite.com$
RewriteCond %{REQUEST_URI} !^/mysite/frontend/www

RewriteRule ^(.*)$ /mysite/frontend/www/$1 [L]

答案 2 :(得分:0)

你不需要编辑.htaccess。您只需将Yii条目脚本(index.php)和默认的.htaccess从子目录移动到webroot(以便它们直接驻留在public_html下)。将index.php和.htaccess移动到根目录后,所有Web请求都将直接路由到webroot下的index.php(而不是子目录),从而消除了url的/子目录部分。

移动文件后,您需要编辑index.php以更新对yii.php文件(在Yii框架目录下)以及Yii配置文件(main.php)的引用。最后,您需要将assets目录直接移动到webroot,因为默认情况下,Yii希望assets目录与入口脚本位于同一位置。

这应该是您需要做的所有事情,但如果您需要更多细节,我会在这里完整地描述这种方法:

http://muhammadatt.tumblr.com/post/83149364519/modifying-a-yii-application-to-run-from-a-subdirectory