PHP程序:虚拟域名服务DIY
作者:堵晴__晨1997_361 | 来源:互联网 | 2014-07-17 11:58
编者按:用过网易的my.yeah.net域名转向服务的朋友们一定都对它的强大功能感兴趣不已吧?只要申请了自己的虚拟域名,如coolfish.yeah.net,以后无论自己的真实网址如何变化,访问者都能使用这个虚拟域名准确访问到自己的网站,真的很方便。其实,
编者按: 用过网易的my. yeah. net域名转向服务的朋友们一定都对它的强大功能感兴趣不已吧? 只要申请了自己的虚拟域名, 如coolfish. yeah. net, 以后无论自己的真实网址如何变化, 访问者都能使用这个虚拟域名准确访问到自己的网站, 真的很方便。其实, 虚拟域名并不复杂。如果你有一点网络编程的基础, 再看完本文, 你也可以自己实现虚拟域名服务, 过一把ISP的瘾。 在因特网飞速发展的今天, 各式各样的网络服务层出不穷。今天我们要探索的虚拟域名服务就是现在众多免费午餐中的一道大菜。 虚拟域名是什么? 虚拟域名服务是伴随着免费个人主页空间的出现而开始流传的。中国的个人主页服务始于1996年初, 随后便出现了湛江“碧海银沙”、网易个人主页基地等许多较大规模的个人主页空间服务, 个人主页曾一度盛行, 为中国因特网的普及和发展做了很重要的铺垫。但是由于诸如www. nease. net/ ~myname等式样的网址在形式上比较复杂, 难以记忆, 于是将这种烦琐的地址转换成myname. yeah. net等简洁形式的虚拟域名服务便应运而生。 我们知道, 常见的域名有. com、.net等多种, 类似5945. net的域名, 我们就称为顶级域名, 也是需要付费的域名, 而诸如abc. 5945. net形式的域名, 我们就常称为三级域名, 可以由用户本身定义, 无需付费。所谓的虚拟域名通常是在三级域名或多级域名上做文章, 虚拟域名服务的任务就是将简单而容易记忆的三级或多级域名重定向到一个相对复杂而不易记忆的URL地址, 该服务的意义也即在于此。 泛域名是什么? 熟悉NT的虾米都知道, 如果要在NT上设置三级、多级域名, 首先需要设置DNS服务器, 让形如abc. 5945. net的域名能够解析到我们指定的主机IP地址上, 然后我们需要设置该主机的IIS( Internet Information Server) , 让该三级域名能访问对应URL地址。由此可见这个过程并不复杂, 然而需要对各台主机有相应的配置权限, 显然这是不可能的; 同时, 提供大量而密集的服务时, 设置过程显得缓慢而烦琐。那么真正的虚拟域名服务是怎样实现的呢? 答案很简单: 使用泛域名。 泛域名类似于DOS下的通配符, 比如你在DNS中建立一个名为* .5945. com的泛域名, 则所有如www. 5945. net、abc. 5945. net、ftp. abc. 5945. net等形式的域名都不用在DNS中另行设置而“自动生效”, 它们在被DNS解析时均会指向建立此泛域名时所指定的同一个IP地址。这样, 我们只需要为我们的主域名申请一个泛域名解析服务, 域名解析问题就迎刃而解了, 而且被解析到同一个IP地址, 那么我们所要做的就是在这个IP地址所对应主机的默认WEB页面上做文章, 让不同的子域名进行URL重定向, 转到它们所希望的URL网址上去。这里需要说明的是, 每台提供WEB服务的主机都有一个默认的WEB服务, 如果一个域名被解析到该主机, 而在WEB服务器软件中没有设置其对应文档目录时, 对该网址的请求即被提交给默认WEB服务, 这是我们虚拟域名服务的基本流程, 同时也说明, 一台主机只能提供一个虚拟主机服务。 例程解析: 我们以PHP程序为例来介绍这个过程。 假设我们需要提供域名为5945. net的虚拟域名服务, 5945. net主机所默认的WEB服务的默认文档为index. php( 默认文档页面名可以由WEB Server设置) , 那么该页面程序就应负责将abc. 5945. net重定向到我的免费空间, 比如: www. netease. com/ ~abc/ default . htm。那么, 我们的程序首先需要分析用户所访问的三级域名是什么。 index. php: $domain= $SERVER_NAME; / / 取得用户所访问的域名全称 $domain= eregi_replace( '.5945.net' , ' , $domain) ; / / 截取域名全称, 获取用户所要访问的三级域名, 获取所访问的域名全称, 可以直接使用PHP系统变量$SERVER_NAME或者$HTTP_HOST, 注意引用系统内部变量必须大写。事实上PHP系统内部已经对用户浏览器发送的访问请求头信息进行了全面的分析, 并分割成、保存成相应的系统变量, 以方便程序使用。第二个语句使用正则替换, 查找“.5945. net”并替换成空字符, 这样就获得了三级域名。 通常, 一个大型的虚拟域名服务都是将用户子域名和其对应URL放在数据库里, 这样, 用户可以随时注册新的三级域名和更改域名对应的URL, 那么下面的工作就是从数据库中检索出该三级域名对应的URL( 数据库检索程序略) 。 ...... / / 根据三级域名检索数据库, 并得到变量$url, 其中存放了该域名对应的URL地址 Header( "Location: $url" ) ; / / 系统重定向, 使用户浏览器转向相应URL 获得了对应URL地址之后, 我们可以使用PHP的header函数给用户浏览器发送一个重定向信息, 让用户转移到相应的URL地址, 这样一个完整的虚拟域名服务过程就结束了。这里我们需要注意的是header函数之前, 不能对浏览器有任何输出, 否则会产生错误, 另外重定向操作中的URL地址应该表述完整, 例如: http: / / www. netease. com/ ~abc/ ~index. htm。 广告窗口的弹出: 细心的读者肯定发现, 常见的虚拟域名服务通常会有弹出广告窗口, 是怎么实现的呢? 为了能统一控制, 必须在重定向用户浏览器之前弹出这个广告框, 那么重定向操作就不能简单地使用header函数了, 因为这个函数要求使用前不能对浏览器有任何输出。要实现它, 我们必须改变方法: ...... / / 根据三级域名检索数据库, 并得到变量$url, 其中存放了该域名对应的URL地址 echo '' ; / / 输出一段Javascript代码, 用以打开一个广告窗口, 显示广告页adv. htm echo '. $url. '">' ; / / 使用HTML的meta语句来实现系统重定向, 让用户浏览器转向相应URL 好了, 虚拟域名服务的秘密已经完全展示在我们面前了, 最后, 我想再问一下聪明的读者, 我们这里的程序片段是假设用户只输入形如abc. 5945. net的虚拟域名, 那我们要实现abc. 5945. net/ test. htm形式的转向该怎么做呢? <
推荐阅读
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ...
[详细]
蜡笔小新 2024-12-27 18:20:43
本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ...
[详细]
蜡笔小新 2024-12-26 16:36:34
本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ...
[详细]
蜡笔小新 2024-12-14 15:56:15
我有这种ajax$.ajax({type:"POST",url:"bee_sesi_edit.php ...
[详细]
蜡笔小新 2024-12-10 17:23:30
本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 13:15:40
QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ...
[详细]
蜡笔小新 2024-12-28 12:33:18
本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ...
[详细]
蜡笔小新 2024-12-28 12:07:46
尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ...
[详细]
蜡笔小新 2024-12-28 11:12:44
本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 09:49:42
本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ...
[详细]
蜡笔小新 2024-12-28 09:10:26
本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ...
[详细]
蜡笔小新 2024-12-28 02:40:28
本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ...
[详细]
蜡笔小新 2024-12-27 21:20:10
本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ...
[详细]
蜡笔小新 2024-12-26 16:54:06
本文探讨如何在VueJS项目中通过配置vue.config.js文件实现多页面应用(MPA),特别是针对管理端和客户端的不同需求。 ...
[详细]
蜡笔小新 2024-12-02 11:22:01
堵晴__晨1997_361
这个家伙很懒,什么也没留下!