2013-02-05 49 views
2

我正在做一个Yii网站,它由不同的模块组成,这些模块应该从不同的顶级域名访问。我需要,因此,每个基地都取决于模块。此外,还应该检查国家代码并将其作为get参数发送。像this根据域名重写基础url

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^([^.]+)\.micrositedomain\.com$ 
RewriteRule ^(.*)$ http://bigsite.com/microsite/$1?lang=en [QSA] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.micrositedomain\.es$ 
RewriteRule ^(.*)$ http://bigsite.com/microsite/$1?lang=es [QSA] 

RewriteCond %{HTTP_HOST} ^([^.]+)\.micrositedomain2\.com$ 
RewriteRule ^(.*)$ http://bigsite.com/microsite2/$1?lang=en [QSA] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.micrositedomain2\.es$ 
RewriteRule ^(.*)$ http://bigsite.com/microsite2/$1?lang=es [QSA] 

但是,我不太确定在哪里处理这个问题。这显然应在根一个.htaccess,但我不知道如何将它与我的.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 

而且域(www.micrositedomain.com,www.micrositedomain2.com ...)bigsite.com根,不是每个模块,但我不能真正保证。

我应该按照哪一步来完成?

TL;博士

对于那些在赶时间,我想:从不同的结构域/国家代码

  • 重写URL到单个结构域,并通过这些参数。
  • 告诉我的托管管理员域应指向的位置。

如何解决这个问题?

回答

2

我不知道如何使它在.htaccess中,但你可以使它在YII配置。尝试这样的事情

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName'=>false, 
    'rules'=>array(
     'http://<module:\w+>\.<domain:(micrositedomain|microdomain2)>\.<zone:(com|es)>/<controller>/<action>'=>'<module>/<controller>/<action>', 

之后,你应该把一些MyController.php在组件文件夹

class MYController extends CController 
{ 
    public $domain='micrositedomain'; 
    public $language='en'; 

    public function init() { 
     if(isset($_GET['zone'])) 
     { 
      $this->language=($_GET['zone']=='com')?'en':$_GET['zone']; 
     } 
     if(isset($_GET['domain'])) 
     { 
      $this->domain=$_GET['domain']; 
     } 
    } 
} 

你所有的控制器应该扩展。

您所有的域名都应该指向您的应用程序目录

+0

比以往任何时候都好。与托管服务提供商(声称在htaccess上非常出色)战斗了大约两个月之后,他们无法完成您在几行内完成的任务。如果我能+2你,我会! – Korcholis

+0

你好! – dr0zd