虚拟域名系统关键技术在于:实现Web页面重定向(Redirctory)在本质上虚拟域名系统和虚拟机系统完全区别虚拟机虚拟域名和IP是存在对应关系而虚拟域名系统不需要将域名和IP做映射也就是说它根本不需要复杂域名解析机制和虚拟机来完成它所做事情就是当你在请求yourname.somedo时将你浏览器重新定向到你本来存放Html页面地方
为了介绍说明更完善请看图例:
我提供源是运行环境是:RedHat 5.1 Linux下Apache1.3.6 Web服务器+PHP3语言 在编写的前我们首先要设置好我们服务器首先要让Apache服务器支持php3到ftp.redhat.com下载mod_php-2.0.1-9.i386.rpm安装后修改/etc/httpd/conf/http.conf文件去掉#LoadModule php3_module句前面#注释号同样在/etc/httpd/conf/srm.conf文件里去掉#AddType application/x-httpd-php3 .php3前面注释号同时在DirectoryIndex项后添加index.php3重新启动Apache Server此时服务器就支持标准php3语言脚本文件了并能将index.php3作为默认首页
设置DNS服务器使其能对泛域名解析般Unix和Linux系统DNS解析都是由Bind守护完成Bind4和Bind8配置文件分别/etc/named.boot和name.conf配置时根据你系统修改设置Bind配置文件/etc/named.boot在其中加入“primary do.com db.do”句添加个新域记录在/etc/name.conf中加入 zone "do.com" {
type master;
file "db.do”;
};
在/var/name/中新建主域记录文件db.do其格式为:
N SOA dns.do.com root.do.com (
199811291 ;Serial
28800 ;refresh
7200 ;retry
604800 ;expire
86400) ;minimum
dns
MX 10 dns.do.com.
dns A 202.115.135.50
www A 202.115.135.50
* A 202.115.135.50
关键是最后句即将整个域可能出现未做标记所有Hostname全部指向同IP 执行/usr/sbin/ndc reload重新加载域名数据库测试下此时应该随便ping个do域内主机(除已经标记)都指向了指定IP那么DNS服务器设置完成
最后步是编制PHP3脚本我们刚才已经在图中详细介绍说明了整个原理所以写个重新定向就不是很难了
让我们来看个由IE5.0送出完整HTTP头信息: Accept: application/vnd.ms-excel,
application/msword,
application/vnd.ms-powerpo,
image/g,
image/x-xbitmap,
image/jpeg,
image/pjpeg, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-cn
Connection: Keep-Alive
Host:ww.yahoo.com
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0b1; Windows 98)
我们需要在整个HTTP头信息中取出Host信息然后将www.xxx.xxx形式第部分“www”即HostName(也即是用户注册name)单独取出作为重定向检索关键字
检索到用户注册URL信息后我们给用户浏览器送个重定向命令“Localtion: http://somewhere/userinfo.html”将用户重定向到指定页面
在PHP3中有GetAllHeader()取得浏览器送出HTTP头信息我们主要需要使用此来完成整个
后面附有源由于只是实验性质所以在查询用户信息时没有使用数据库如果整个系统要实际应用话定要和数据库挂接起来不然查询用户信息过程将是十分漫长大大影响效率而且用户数据管理也不方便(由于篇幅限制没有给出注册和管理所需写记录请自行添加)
在源中所有用户信息记录在data子目录下user.dat文件中其格式为:
username:
http://octopus.cdit.edu.cn/~qap213/index.html
附PHP3源:
//Get HTTP’s Header and parse it//
$headers = getallheaders;
while (list($header, $value) = each($headers)) {
($header"Host"){$username= strtok($value,".");}}
//Jump out the Banner's Window//
echo '';
// seek the user information from the recorded file//
(!$usrinfo=file("data/user.dat")){echo "Open Data File Error!!";}
$url="http://";
for($i=0;$i
(strtok($usrinfo[$i],":")$username){
$url=$usrinfo[$i+1];
}
($url"http://"){echo "not found the uesrname of Data!";}
{
echo '<meta http-equiv="refresh" content="0;','url=',$url,'">';}
?>
最新评论