|
当前所做的项目需要对部分模块做二级域名访问的处理,但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,所以并不是所有的二级域名我都希望它被改写的。
|
|