CodeIgniter中实现泛域名解析


Posted in PHP onJuly 19, 2014

最近遇到一个项目要求使用二级域名,以方便SEO,由于采用的是CodeIgniter框架,这个框架虽然提供了灵活的路由功能,但是不能实现二级域名。查询了多很资料之后,经过几番测试得出了解决方法。本例采用www.mysite.com这个假域名。

步骤1:

首先在httpd.conf中建立virtualhost

<VirtualHost *:80>
  ServerAdmin admin@163.com
  DocumentRoot "D:/www/cms"
  ServerName www.mysite.com
  ServerAlias *.mysite.com #这里采用泛解析的方式
  ErrorLog "logs/mysite.com-error.log"
  CustomLog "logs/mysite.com.log" common
</VirtualHost>

步骤2:

我要实现这样的效果:
http://www.mysite.com/category/news/1.html  =====>  http://category.mysite.com/news/1.html
为了确保能正常访问这个domain,必须修改hosts文件

127.0.0.1 www.mysite.com
127.0.0.1 category.mysite.com

步骤3:

修改:system/core/URI.php的_set_uri_string方法

/**
 * Set the URI String
 *
 * @access public
 * @param string
 * @return string
 */
function _set_uri_string($str)
{
 // Filter out control characters
 $str = remove_invisible_characters($str, FALSE);
 // If the URI contains only a slash we'll kill it
 $this->uri_string = ($str == '/') ? '' : $str;
 // Add by fengyun for url rewrite at 2013-1-25 1:02:27
 @include(APPPATH.'config/domain'.EXT);
 $arrServerName = explode('.', $_SERVER['SERVER_NAME']);
 if (in_array($arrServerName[0], $domain)) {
 $this->uri_string = '/' . $arrServerName[0]."/" . $this->uri_string;
 }
}

这里主要是为了让URL能正确的被CI理解。

步骤4:在application/config/下建立一个domain.php文件。内容如下:

<?php
if ( ! defined('BASEPATH'))
exit('No direct script access allowed');
$domain = array('category',"detail","info","archive");

至此已经基本完成了,不过,使用site_url()的时候,如果要使用二级域名,就得另做处理了。

PHP 相关文章推荐
开发大型 PHP 项目的方法
Jan 02 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
跟我学Laravel之路由
Oct 15 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
session 加入redis的实现代码
Jul 15 PHP
浅谈PHP安全防护之Web攻击
Jan 03 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
php实现建立多层级目录的方法
Jul 19 #PHP
PHP实现图片压缩的两则实例
Jul 19 #PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 #PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 #PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 #PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 #PHP
简单实用的网站PHP缓存类实例
Jul 18 #PHP
You might like
php5.4传引用时报错问题分析
2016/01/22 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
Python 的 Socket 编程
2015/03/24 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python微信好友数据分析详解
2018/11/19 Python
Django REST framework视图的用法
2019/01/16 Python
python的命名规则知识点总结
2019/10/04 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
五好党支部事迹材料
2014/02/06 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
毕业生个人自荐书
2015/03/05 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL