本帖最后由 Martix 于 2016-11-7 15:57 编辑
好久没来了,论坛突然换了界面 就是不一样哈,高大上了许多.
在网上看到的帖子 自己也没实验 搬过来存个档吧
转发:http://blog.hs5233.com/blog/codeigniter_group.html codeigniter 3.1设置子域名解析 首先在application\config目录下增加一个domain.php文件,然后写入:
/*domain:允许访问的子域名
default_domain:www前缀默认进入的分组
*/
//默认分组
PHP复制代码 $default_domain = array('blog'); 复制代码
//全部分组
PHP复制代码 $domain = array('blog','test','wechat'); 复制代码
查看system\core\CodeIgniter.php: /* * ---------------- * Instantiate the routing class and set the routing * ----------------- */
PHP复制代码 $RTR =& load_class ('Router', 'core', isset($routing) ? $routing : NULL); 复制代码
可知codeigniter控制路由的程序是同目录下的Router.php; 打开Router.php,添加一个成员属性和一个成员方法,比如: /** * 访问的域名前缀 * * @var string
*/
PHP复制代码 public $domain;
// --------------------------------------------------------------------
/** * 设置domain *
* @return void
*/
protected function set_domain () {
$reqDomian = explode('.',$_SERVER['SERVER_NAME']);
require_once(APPPATH .'config/domain.php');
$this->domain = $reqDomian[0] == 'www' ? $default_domain[0] : $reqDomian[0];
if(!in_array($this->domain,$domain)){
show_404 ($RTR->directory.$class.'/'.$method);
}
} 复制代码
然后把此文件内所有遍历controllers的路径都增加$this->domain.'/',例如:
改为
PHP复制代码 if ( ! file_exists(APPPATH .'controllers/'.$this->domain.'/'.$this->directory.ucfirst($class).'.php')) 复制代码
返回system\core\CodeIgniter.php,把此文件内所有遍历controllers的路径都增加$RTR->domain.'/',例如: PHP复制代码 APPPATH.'controllers/'.$RTR->directory.$error_class.'.php' 复制代码
改为
PHP复制代码 APPPATH.'controllers/'.$RTR->domain.'/'.$RTR->directory.$error_class.'.php' 复制代码
OK,代码部分修改完毕。具体使用方式: 在application\controllers目录下建立分组,比如分index和admin;
application\config\domain.php文件里面的default_domain设置www前缀访问的分组,domain设置全部分组。
//默认分组$default_domain = array('blog'); //全部分组 $domain = array('blog','test','wechat');
教程完毕,点击下载源码。
bug:当不带域名前缀访问的时候会显示404页面; 解决方案:修改set_domain方法: PHP复制代码 protected function set_domain () {
$reqDomian = explode('.',$_SERVER['SERVER_NAME']);
if(count($reqDomian)<3)$reqDomian[0] = 'www';
require_once(APPPATH .'config/domain.php');
$this->domain = $reqDomian[0] == 'www' ? $default_domain[0] : $reqDomian[0];
if(!in_array($this->domain,$domain)){
show_404 ($RTR->directory.$class.'/'.$method);
}
} 复制代码
|