玩转虚拟域名◎+ .


Posted in PHP onOctober 09, 2006

玩转虚拟域名◎+ .

不知道大家最近上网是否发现一个新现象,就是有一些网站开始提供“username@server”的虚拟域名服务。由于“@”的魅力,大家纷纷申请,你或许会想:“如果我也能提供这种服务,该多好阿:)人气肯定不错!”本文将给大家揭开“@”的“神秘”面纱,让大家都可以来“@”!(Do u @ today?)
别急,这个并不是电子邮件的地址,是一种虚拟域名,不相信的话可以在浏览器中访问“bbs@zphp.com”。部分朋友应该使用过IE的FTP功能,就是在浏览器的地址栏中键入“password:username@server”IE就会自动登陆FTP服务器;而在Http1.1协议中,就规定了Http访问授权功能,形式同样为“password:username@server”,其中“password:”可以省略,也是是访问“bbs@zphp.com”实际上是以bbs的身份访问“zphp.com”这个服务器。
那么我们只是需要将具体的URI传送给PHP程序,在数据库中搜索出真实的URL重定向就可以了。
首先我们需要制作一个传送URI的页面(作为服务器的默认文档,一般命名为index.htm);在JS的Window对象中就可以实现这项功能,下面是index.htm的源代码:
<script>
this.location = ‘gotourl.php?url=' + this.location.href;
</script>
上面的代码会将浏览器重定向到gotourl.php,并且通过QueryString给变量$url赋值为当前的URI。
成功将URI传递给PHP程序后,就可以进入数据库查找真实URL,下面是SQL数据库相对应的table 的结构:
CREATE TABLE domain(
Id int(3) UNSIGNED DEFAULT ‘0' NOT NULL, # 域名ID
Domain char(20) NOT NULL, # 域名
Gotourl char(255) NOT NULL, # 真实的URL
);
建立好了Table,就可以开始编写gotourl.php了,程序分为三个部分:

1、 分析URL:
$url = preg_replace(“/^http:\\/\\//I”, “”, $url); // 将URL前面的“http://”去掉,不区分大小写
$url = preg_replace(“/@.+$/”, “”, $url); // 将“@”后面的部分去除
那么,剩下的URL就只含有“username”的部分了。
为了给数据库应用,需要对铭感的字符进行处理:
$url = addslashes($url);
2、 搜索真实的URL:
这里为了实现程序的通用性,使用了一个数据库的操作类(修改自PHPLib)来操作SQL数据库:
$db = new dbSql(); // 连接数据库
$queryString = sprinf(“SELECT gotourl FROM domain WHERE domain='%s';”, $url); // 生成查询字符串
$gotourl = $db->result($queryString); // 查询取得结果
3、 重定向:
在PHP中重定向浏览器有多种方法,在这里使用比较简单的HttpHeader来实现:
header(“location: $gotourl”);

其实像网易那样子的“username.yeah.net”的虚拟域名服务和“@”的实现方法大同小异,但是“.”需要以价值200元的DNS泛解析为代价,而“@”所需要的仅仅是:
1、 PHP/SQL数据库的权限;
2、 真正DNS解析的域名。

如果需要在虚拟域名服务中加入广告,比如网易的Popup窗口,可以将重定向部分改为:
<script>
window.open("url","nease","width=windth,height=height");
</script>

为了对得起“天地良心”,笔者没有将合并后完整的程序加上来(骗稿费?),如果大家比较懒,需要完整的代码(包括了添加等等),可以在http://zphp.com或者http://bbs@zphp.com取得。希望大家都有一个好的访问量。 

PHP 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
PHP4中session登录页面的应用
Jul 25 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
php猴子选大王问题解决方法
May 12 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
php array_merge_recursive 数组合并
Oct 26 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
桌面中心(四)数据显示
Oct 09 #PHP
桌面中心(一)创建数据库
Oct 09 #PHP
桌面中心(二)数据库写入
Oct 09 #PHP
桌面中心(三)修改数据库
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击(上)
Oct 09 #PHP
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 #PHP
PHP 和 MySQL 开发的 8 个技巧
Oct 09 #PHP
You might like
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
php数组分页实现方法
2016/04/30 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
python如何使用unittest测试接口
2018/04/04 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
通信工程专业毕业生推荐信
2013/12/25 职场文书
银行实习生的自我评价
2014/01/13 职场文书
计算机个人求职信范例
2014/01/24 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
小学生倡议书范文
2014/05/13 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
围城读书笔记
2015/06/26 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书