玩转虚拟域名
玩转虚拟域名◎+ .发表于:中国PHP 联盟 www.phpx.com 作者/来源:y10k/y10k 人气:5489玩转虚拟域名◎+ .不知道大家最近上网是否发现一个新现象,就是有一些网站开始 提供
玩转虚拟域名◎+ .
发表于:中国PHP 联盟 www.phpx.com 作者/来源:y10k/y10k 人气:5489
玩转虚拟域名◎+ .
不知道大家最近上网是否发现一个新现象,就是有一些网站开始 提供“account@server”的虚拟域名服务。由于“@”的魅力, 大家纷纷申请,你或许会想:“如果我也能提供这种服务,该多 好阿:)人气肯定不错!”本文将给大家揭开“@”的“神秘” 面纱,让大家都可以来“@”!(Do u @ today?) 别急,这个并不是电子邮件的地址,是一种虚拟域名,不相信的 话可以在浏览器中访问“bbs@zphp.com”。部分朋友应该使用过 IE 的FTP 功能,就是在浏览器的地址栏中键入“ password:account@server”IE 就会自动登陆FTP 服务器;而在 Http1.1协议中,就规定了Http 访问授权功能,形式同样为“ password:account@server”,其中“password:”可以省略, 也是是访问“bbs@zphp.com”实际上是以bbs 的身份访问“ zphp.com ”这个服务器。 那么我们只是需要将具体的URI 传送给PHP 程序,在数据库中搜索 出真实的URL 重定向就可以了。
首先我们需要制作一个传送URI 的页面(作为服务器的默认文档 ,一般命名为index.htm );在JS 的Window 对象中就可以实现这 项功能,下面是index.htm 的源代码:
上面的代码会将浏览器重定向到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 就只含有“account ”的部分了。
为了给数据库应用,需要对铭感的字符进行处理:
$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”);
附
其实像网易那样子的“account.yeah.net ”的虚拟域名服务和 “@”的实现方法大同小异,但是“. ”需要以价值200元的DNS 泛 解析为代价,而“@”所需要的仅仅是:
1、 PHP/SQL数据库的权限;
2、 真正DNS 解析的域名。
如果需要在虚拟域名服务中加入广告,比如网易的Popup 窗口, 可以将重定向部分改为:
为了对得起“天地良心”,笔者没有将合并后完整的程序加 上来(骗稿费?),如果大家比较懒,需要完整的代码(包括了 添加等等),可以在http://zphp.com或者http://bbs@zphp.com 取得。希望大家都有一个好的访问量。