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

[程序 App] 设置2级域名咯

[复制链接]
发表于 2016-11-7 10:57:45 | 显示全部楼层 |阅读模式
本帖最后由 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->directory.ucfirst($class).'.php'))
复制代码

改为
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);        
         }    
}
复制代码




评分

参与人数 1威望 +5 收起 理由
Hex + 5 很给力!

查看全部评分

发表于 2016-11-7 13:52:47 | 显示全部楼层
赞!如果能改改代码高亮就好了!哈哈

评分

参与人数 1威望 +5 收起 理由
Martix + 5 很给力!

查看全部评分

 楼主| 发表于 2016-11-7 16:00:07 | 显示全部楼层
Hex 发表于 2016-11-7 13:52
赞!如果能改改代码高亮就好了!哈哈

猪大,代码已高亮.确实好看了不少.
发表于 2016-11-7 16:18:42 | 显示全部楼层
Martix 发表于 2016-11-7 16:00
猪大,代码已高亮.确实好看了不少.

棒棒哒!
发表于 2016-11-7 16:19:56 | 显示全部楼层
Hex 发表于 2016-11-7 13:52
赞!如果能改改代码高亮就好了!哈哈

论坛刚换界面的那几天没适应,我还以为是我网速卡得样式都加载不来了。。。
发表于 2016-11-7 16:20:57 | 显示全部楼层
soho22 发表于 2016-11-7 16:19
论坛刚换界面的那几天没适应,我还以为是我网速卡得样式都加载不来了。。。 ...

哈哈,论坛样式应该还会再调整,现在的样式我还是不太满意,有点太白了,晃眼。

点评

H大,帮我看下这个问题呗 http://codeigniter.org.cn/forums/forum.php?mod=redirect&goto=findpost&ptid=15405&pid=100359&fromuid=47457  发表于 2016-11-8 11:44
很有特色很简洁!满喜欢的  发表于 2016-11-7 17:37
 楼主| 发表于 2016-11-8 11:37:06 | 显示全部楼层
Hex 发表于 2016-11-7 16:20
哈哈,论坛样式应该还会再调整,现在的样式我还是不太满意,有点太白了,晃眼。 ...

可以设置成 自定义的 个人觉得 自定义更爽 上传图片做背景 更完美了.
发表于 2016-11-8 14:01:13 | 显示全部楼层
Martix 发表于 2016-11-8 11:37
可以设置成 自定义的 个人觉得 自定义更爽 上传图片做背景 更完美了.

哈哈,这恐怕就超出 Discuz! 的能力了。。。。
 楼主| 发表于 2016-11-10 12:22:38 | 显示全部楼层
Hex 发表于 2016-11-8 14:01
哈哈,这恐怕就超出 Discuz! 的能力了。。。。

猪大 你抽个时间自己改改 不就好了吗 换个背景 不是太难吧.
发表于 2016-11-10 14:09:08 | 显示全部楼层
Martix 发表于 2016-11-10 12:22
猪大 你抽个时间自己改改 不就好了吗 换个背景 不是太难吧.

改 discuz 不好改。。。。。先好好改改论坛样式吧~

本版积分规则