用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3012|回复: 1
收起左侧

[中级] 关于CodeIgniter框架的二级域名的简单路由

[复制链接]
发表于 2014-7-22 03:58:03 | 显示全部楼层 |阅读模式
当前所做的项目需要对部分模块做二级域名访问的处理,但CI本身是不支持多级域名上面的路由功能的,而也得益于CI的单路线路由,我们只需要简单修改下URI.php这个文件,即可满足我的要求。

思路是,CI是以$_SERVER['REQUEST_URI']这个路径来解析自己所需的路由路径,所以我们只需要在它被解析前进行修改即可。
当然,还有一个比较好一点的方式是,通过变量来传递,而不是直接修改PHP系统变量,我在整个框架里使用多少次此系统变量没有很好地去了解,可能会在哪里出现莫名的错误。

框架的运作流程我就不多说了,直接修改URI.php
PHP复制代码
 
private function _detect_uri()
    {
        //处理域名
        $this->_parse_host_name();
 
        if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME']))
        {
            return '';
        }
.
.
.
.
    }
 
    // --------------------------------------------------------------------
 
    /**
     *用来处理域名,如果域名是二级域名的话,则检测是否需要做相关处理
    */

    private function _parse_host_name()
    {
        $http_host =  $_SERVER['HTTP_HOST'];
        if (count($http_host_parts = explode('.', $http_host)) >= 3) {
            $rewrite_array = array('blog');
            if (in_array(strtolower($http_host_parts[0]), $rewrite_array)) {
                $_SERVER['REQUEST_URI'] = $http_host_parts[0] . '/' . $_SERVER['REQUEST_URI'];
            }
        }
    }
 
 
复制代码



之所以需要加$rewrite_array = array('blog');
是因为我有一个测试的域名是test.xxx.com,所以并不是所有的二级域名我都希望它被改写的。

发表于 2014-8-8 15:55:57 | 显示全部楼层
感谢楼主分享,给你点个赞

本版积分规则