2013-10-11 278 views
0
  • 我试图设置Yii站点从子目录加载到根域。在我的根站点文件夹中,我只有根目录.htaccess文件和包含Yii站点的子目录“子目录”。我发现,在我的本地环境工作的解决方案:Yii框架:在子目录中使用htaccess的子目录不工作Hostgator

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

但是当我上传的网站HostGator的它只是不正确 工作例如

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

如果我使用http://mydomain.com/contact或(http://mydomain.com/site/contact)在HostGator的,我得到默认的索引页面(称为网站/指数 - 现场控制器和index动作代替)

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

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

回答

1

我找到了可行的替代解决方案。我被迫使用老式的网址,而不是路径,所以我改变了我的urlManager到:

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

现在我的根htaccess的是这样的:

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

因此,访问

http://mydomain.com/site/contact 

实际映射的URL是

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

作为结果返回正确的联系页面

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] 
+0

对不起,以前的问题是不是我的,它只是帮助我在我的本地环境中解决问题,所以我已经将它添加为参考,但现在将其删除。 HostGator上的这个网站仍然存在问题。谢谢! – gradosevic

+0

@argonius,在你的问题中,你的意思是'mydomain.com/site/contact'能够正常工作,还是'mydomain.com/subdir/site/contact'?你能否介绍一下你的实际场地结构? –

+0

在我的根站点中,我只有这个root htaccess文件和包含我的Yii站点的目录'subdir'。当直接访问我的网站时,我可以使用mydomain.com/subdir/site/contact或mydomain.com/subdir/contact(我为此联系人添加了urlManager规则=>网站/联系人,所以这也会起作用)。我想从这些URL中删除'subdir'关键字,但这似乎不能在HostGator上工作。 – gradosevic

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)的引用。最后,您需要将资产目录直接移动到webroot上,因为默认情况下,Yii预期资产目录位于与条目脚本相同的位置)。

这应该是所有你需要做的,但如果你需要更多的细节,我在这里充分描述的方法:

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