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调用Java对象的方法
Oct 09 PHP
用libTemplate实现静态网页的生成
Oct 09 PHP
也谈php网站在线人数统计
Apr 09 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 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
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
canvas实现钟表效果
2017/02/13 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python实现媒体播放器功能
2018/02/11 Python
python实现猜单词小游戏
2020/05/22 Python
python之django母板页面的使用
2018/07/03 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Python实现把类当做字典来访问
2019/12/16 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
小学生自我鉴定
2013/10/12 职场文书
上课说话检讨书大全
2014/01/22 职场文书
小学毕业感言50字
2014/02/16 职场文书
热情服务标语
2014/10/07 职场文书
交通安全月活动总结
2015/05/08 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
新闻稿格式范文
2015/07/18 职场文书
会计专业自荐信范文
2019/05/22 职场文书