long1390 发表于 2014-7-22 03:58:03

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

当前所做的项目需要对部分模块做二级域名访问的处理,但CI本身是不支持多级域名上面的路由功能的,而也得益于CI的单路线路由,我们只需要简单修改下URI.php这个文件,即可满足我的要求。

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

框架的运作流程我就不多说了,直接修改URI.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), $rewrite_array)) {
                $_SERVER['REQUEST_URI'] = $http_host_parts . '/' . $_SERVER['REQUEST_URI'];
            }
      }
    }




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

aqxinzhuan 发表于 2014-8-8 15:55:57

感谢楼主分享,给你点个赞
页: [1]
查看完整版本: 关于CodeIgniter框架的二级域名的简单路由