玩转虚拟域名◎+ .


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 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
使用array_map简单搞定PHP删除文件、删除目录
Oct 29 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
详解php中的implements 使用
Jun 13 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
php实现微信和支付宝支付的示例代码
Aug 11 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
关于svn冲突的解决方法
2013/06/21 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
vue.js的提示组件
2017/03/02 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
公司前台接待岗位职责
2013/12/03 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
秸秆管理实施方案
2014/03/15 职场文书
股东出资证明书范例
2014/10/04 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
PHP解决高并发问题
2021/04/01 PHP
基于Redis位图实现用户签到功能
2021/05/08 Redis
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers