对酒当哥2010 / 服务器相关 / 二级域名的实现与解析 asp

分享

   

二级域名的实现与解析 asp

2011-06-30  对酒当哥2...

一个二级域名实现最基本的例子
<%
temp1 = Request.ServerVariables("HTTP_HOST")
temp2 = Right(Request.ServerVariables("HTTP_HOST"),14) '其中14表示你的域名去掉前辍后剩下的字符数.如下面的 ".yaojerry.name" 不包括引号,一样是14个字符.
temp3 = Replace(temp1,temp2,"")
%>
<%if temp3 <> "www" and temp3 <> "blog" then
Response.Redirect "=" & temp3 %>
<%end if%>

存到inc目录下 test.asp (文件名可以随便取)
在index.asp文件的"<!--#include file="conn.asp"-->"后加上下面这句.
<!--#include file="inc/test.asp"-->

另外需要iis的服务器设一个空的http头

泛域名
                                      
第一步:泛域名的解析

首先我要给大家讲一个故事:故事的内容是“泛域名”。从前啊,有个小朋友叫做“泛域名”,泛域名是谁家的小孩呢?知道DOS 伯伯吗?唉~~对了,泛域名就是DOS 伯伯的表兄的外甥的朋友,DOS有个儿子叫做“通配符”,比如你在计算机中查找一个文件,你打上ice*.*,它就会把什么icech.sys 呀,icech.old呀,icecream.eat等文件统统查找出来。

“泛域名”就是这个样子的,就像“*.icech.com”。那么泛域名有什么功用呢?这么说吧,

你在DNS 中建立一个名为“*.icech.com”的泛域名,那么所有就像www.icech.com、news.icech.com、love.icech.com 等等格式的域名都不用建立就会自动生效,他们都会指向建立此泛域名时指向的IP 地址。如果你申请了一个域名,通过这样的测试,你就会知道你申请的域名是不是泛域名了。不过一般的申请域名的时候如果我做特殊要求,ISP接入商是不提供此项服务的,如果你想解析一下,“呵呵,哈哈,掏钱来”!

建立泛域名的大致步骤是:

1、进入DNS,选“正向查找区域”,单击右键,新建“区域”,输入“icech.com”(你写你自己的域名啊,不要乱用我的域名)

2、选中“icech.com”,单击右键,新建“域”,输入“*”

3、选中“*”,新建“主机”,主机名保持为空,输入相应的IP 地址就OK了。

简单!EASY!你又该说了,悟空,不要大吵大嚷的嘛!小心吓了那些花花草草的。后面的才是关键呢。

第二步:利用程序来完成虚拟域名的解析

假设我们希望设置一个news.icech.com 的域名,当我们在浏览器中输入“news.icech.com”的域名时,他会转向它的真实地址htttp://。一般流程肯定就是,它会首先找到DNS 服务器,并且进行域名与IP 地址的转换,这里因为我们已经设置了泛域名,news.icech.com 就会直接指向icech.com 指向的IP,这之间我们不能做什么其他的设置来改变这一流程。那么我们所要做的就是在这个IP 地址所对应主机的默认WEB页面上做文章,让不同的子域名进行URL重定向,转到它们所希望的URL 网址上去。

1、设置icech.com所在主机所默认的WEB服务的默认文档为index.asp、index.php

或者index.cgi等动态页面,而不能是静态的index.htm 页面。

2、通过ASP、PHP或者CGI程序来进行URL的重定向功能

(1)index.php

$domain=$SERVER_NAME; //取得用户所访问的域名全称

$domain=eregi_replace('.icech.com', '', $domain); //截取域名全称,获取用户所要访问的三级域名,获取所访问的域名全称,可以直接使用PHP系统变量$SERVER_NAME 或 者$HTTP_HOST,注意引用系统内部变量必须大写。事实上PHP 系统内部已经对用户浏览器发送的访问请求头信息进行了全面的分析,并分割成、保存成相应的系统变量,以方便程序使用。第二个语句使用正则替换,查找“.icech.com”并替换成空字符,这样就获得了三级域名。

通常,一个大型的虚拟域名服务都是将用户子域名和其对应URL放在数据库里,这样, 用户可以随时注册新的三级域名和更改域名对应的URL,那么下面的工作就是从数据库中检索出该三级域名对应的URL(数据库检索程序略)。

...... //根据三级域名检索数据库,并得到变量$url,其中存放了该域名对应的URL 地址Header("Location: $url"); //系统重定向,使用户浏览器转向相应URL获得了对应URL 地址之后,我们可以使用PHP的header函数给用户浏览器发送一个重定向信息,让用户转移到相应的URL地址,这样一个完整的虚拟域名服务过程就结束了。

这里我们需要注意的是header函数之前,不能对浏览器有任何输出,否则会产生错误,另外重定向操作中的URL地址应该表述完整,例如:广告窗口的弹出:常见的虚拟域名服务通常会有弹出广告窗口,是怎么实现的呢?为了能统一控制,必须在重定向用户浏览器之前弹出这个广告框,那么重定向操作就不能简单地使用header函数了,因为这个函数要求使用前不能对浏览器有任何输出。要实现它,我们必须改变方法:

...... //根据三级域名检索数据库,并得到变量$url,其中存放了该域名对应的URL 地址

echo '<script language="javascript">window.open("adv.htm");</script>';

//输出一段javascript代码,用以打开一个广告窗口,显示广告页adv.htm

echo '<meta http-equiv="refresh" content="0;URL='.$url.'">';

//使用HTML的meta 语句来实现系统重定向,让用户浏览器转向相应URL。

(2)index.asp

<% name=request.querystring("name") %> ‘这样来获取用户所访问的域名全称
trim(name) ‘用trim 函数来截取域名全称,获取用户所要访问的三级域名与数据库对比,如果与数据库所设置的虚拟域名相同,则直接用response.redirect 转向页面,否则设定另外转向页面。

具体的设计原则就是这些了,其他的就十分简单了,虚拟域名最重要的在于一个思路,

这和我们平时编写程序一样,一个功能的实现并不一定要很高深的技术,成功的关键在于“开动你的头脑”!

二级域名是如何实现的呢?
二级域名基本知识:

     通常我们把类似于的域名称为顶级域名,而bbs.cfan.com.cn称为二级域名。

   二级域名是如何实现的呢?

   
   当我们在IE中输入一个域名时,通过域名解析之后我们能到达目的网站。即当我们输入时,我们到达了220.194.52.20,接下来的服务就交给了220.194.52.20.当打开了域名的泛域名支持后,我们输入bbs.cfan.com.cn也将到达220.194.52.20。

   如果我们仅打开泛域名支持,假设cfan.com.cn只打开泛域名支持,没有进行任何设置,那么我们将得到
220.194.52.20返回的一个错误页面。


   我们要得用的正是这个错误页面。

 

   在这个错误页面中,我们写些代码,即可实现二级域名功能了。


   代码的大概框架是:

           1.取得用户输入的网址,例如,用户输入了bbs.cfan.com.cn,我们就取到这个网址吧。
          
           2.利用字串函数对这个网址进行处理。在这里我们可以处理得到bbs,依据这个字串,我们可以把bbs的主页装入。
           


  在实际运用中常建立一个数据库,把二级域名和地址对应一下。


  到此二级域名原理讲完了。当然,这只是二级域名实现的一种方式,还有其他的方法,等楼下的来说。

  希望大家都写一点,一起把二级域名研究好。一点也不知道的可以到baidu里搜一个

你需要的是一个可以泛解析的顶级域名,如abc.com
这样,形如123.abc.com,bbs.abc.com,fhd.abc.com的二级域名都可以被解析到同一个地址,如指向下面这个index.asp文件,就可以实现二级域名的转向。
<!--#include file="databaseconnect.asp"-->
<%
Dim ourname
ourname="xxx.com"
on error resume next

dim host,i,subname,sql,rs,url,checkhostname
host=lcase(request.servervariables("HTTP_HOST"))

Function findname(hostname)
findname=""
i=instr(hostname,".")
findname=mid(hostname,1,i-1)

if findname="www" then
dim temp
temp=split(hostname,".")
findname=temp(1)
end if

end Function

subname=findname(host)


''''检查是否来自规定的域名 否则报错
checkhost=right(host,8)
if checkhost<>ourname then
closedata()
response.redirect("404.html")
response.end()
end if

set rs=server.CreateObject("adodb.recordset")
sql="select * from url where subname=''''"&subname&"''''"
rs.open sql,conn,1,3
if rs.eof or isnull(rs("url")) then
closedata()
response.Redirect("")
response.end()
end if

if err then
err.clear
closedata()
response.Redirect("")
response.end()
end if

If rs("deleted")=True Then
closedata()
response.redirect("")
end if

''''屏蔽某些id

''''记录总转发量
conn.execute ("update [index] set clicksall=clicksall+1 where id=1")

''''记录单个域名访问量
if request.Cookies("v_date")="" or isempty(request.Cookies("v_date")) then
response.Cookies("v_date")=now()
conn.execute("update url set vtimes=vtimes+1 where subname=''''"&subname&"''''")
end if
if datediff("d",request.Cookies("v_date"),now())>0 then
response.Cookies("v_date")=now()
conn.execute("update url set vtimes=vtimes+1 where subname=''''"&subname&"''''")
end if

if rs("hidden")=False then
dim thisurl:thisurl=rs("url")
closedata()
response.redirect(thisurl)
end if
if rs("hidden")=True then
%>
<html>
<head><title><%=rs("sitename")%></title>
<meta content="<%=rs("sitename")%> xxx.com为您提供免费的二级域名" name="keywords">
<meta content="<%=rs("sitename")%>" name="description">
</head>
<frameset>
<frame src=''''<%=rs("url")%>''''>
</frameset>
</html>
<%
end If
closedata()
%>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>