【问题标题】:Rewrite base url based on domain基于域重写基本 url
【发布时间】:2013-04-02 16:32:59
【问题描述】:

我正在用 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;博士

对于那些赶时间的人,我想:

  • 将来自不同域/国家代码的 url 重写为单个域,并传递这些参数。
  • 告诉我的主机管理员域名应该指向哪里。

在我的情况下你会如何解决这个问题?

【问题讨论】:

    标签: php .htaccess mod-rewrite url-rewriting yii


    【解决方案1】:

    我不确定如何在 .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 放在 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'];
            }
        }
    }
    

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

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

    【讨论】:

    • 迟到比以往任何时候都好。在与托管服务提供商(声称在 htaccess 方面表现出色)进行了大约两个月的斗争之后,他们只是无法完成您仅用几行代码就可以实现的目标。如果我可以 +2 你,我会的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多