我正在用 Yii 做一个网站,它由不同的模块组成,这些模块应该从不同的顶级域访问。因此,我需要每个基础都依赖于模块。另外,还应该检查国家/地区代码并将其作为获取参数发送。类似于 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]
但是,我不太确定在哪里处理这个问题。显然它应该位于根目录中的 .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;博士
对于那些赶时间的人,我想:
- 将来自不同域/国家/地区代码的网址重写到单个域,并传递这些参数。
- 告诉我的托管管理员域名应指向哪里。
对于我的情况,你会如何解决这个问题?
最佳答案
我不确定如何在 .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 放入组件文件夹中
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'];
}
}
}
您的所有 Controller 都应该扩展它。
您的所有域都应指向您的应用程序的目录
关于php - 根据域重写基本 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14706311/