我正在与Yii建立一个网站,该网站包含应从不同顶级域名访问的不同模块。因此,我需要每个基础都取决于模块。此外,还应检查国家/地区代码并将其作为get参数发送。像this这样的东西:
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]
但是,我不太确定在哪里处理这个问题。它显然应该在root中的.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 root,而不是每个模块,但我不能真的保证。
我应该按照哪个步骤来实现这一目标?
对于那些匆忙的人,我想:
在我的情况下你会如何解决这个问题?
答案 0 :(得分:2)
我不知道如何在.htaccess中创建它,但你可以在yii config中创建它。试试这样的事情
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'http://<module:\w+>\.<domain:(micrositedomain|microdomain2)>\.<zone:(com|es)>/<controller>/<action>'=>'<module>/<controller>/<action>',
之后你应该把一些MyController.php放在components文件夹
中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'];
}
}
}
所有控制器都应扩展此功能。
您的所有域名都应指向您的应用程序目录