发新话题
打印

实现WEB中的@虚拟域名系统(原理篇)

实现WEB中的@虚拟域名系统(原理篇)


找到了这遍很好的东东哦,奉献给大家。大家以后不用花钱注册域名了,呵呵! 7 T) L  g1 N+ H
# F* v% Z! K4 a' u
  
- o+ p* \  J1 \3 J
) F; [" Q6 e8 [0 _1 Q& e4 {
) E8 g+ g: j- c' ^! m  很多网友可能发现,现在在一些网站中,特别是个人网站中发现有使用youname@xxx.com的虚拟域名。当我告诉我朋友的时候他们都说这不是电子邮件的地址吗?其实本来确实是的,不过要是将它输入到浏览器的地址中时,它就不是了,而是地地道道地一个子级域名。不信的话,你在浏览器中输入http://bbs@luyu.net和http://guestbook@luyu.net看看。是不是发现他们是两个不同的地址呢,前者是本站BBS登录页,后者是本站留言簿,而本站却是首页是http://luyu.net,很酷吧。 有的网友也问为什么不用http://bbs.luyu.net和http://guestbook.luyu.net做虚拟域名呢,这才是真正的二级子域名啊。因为这在实现方面没什么不同,只是“。”在域名中的作用可大不一样,你可以用http://www.luyu.net访问,确不是http://www@luyu@net吧,因为“。”要考虑到一个解析解码的问题。所以要做“。”的虚拟域名必须要让域名服务商开通泛域名的作用,就是只要在浏览器的地址栏中键入*.luyu.net的域名,都会先到luyu.net服务器上去请求解析解码服务,这样的话,实现起无限多个免费的“。”虚拟域名就不是难是了。关键大部分泛域名的开通是要收100到200元人民币的,所以我们暂不考虑而考虑用免费的@域名了。有的网友也问为什么不用“!#$%”其他的符号而偏偏要用@呢,这一点在看完下面的文章你自然就会明白了。  
2 Q1 k9 y4 n% E9 f& a( e" A# u- G, |5 e
  通过本文章你就可以做出属于自己的@域名了。到时候自己就是管理员,想加什么链接都可以,包括中文的,想想直接打http://壁纸@luyu.net那多爽啊。不过中文要注意的是UTF-8规范问题。  ! a& p* i( D- }, z  U3 q" C3 `6 q

- s: [& |8 y# m3 l# \! p  下面我们就先讲一下实现@虚拟域名的方方面面。  8 F# O0 \0 h8 T& ]: g

$ E( Q4 X) F  a  J. ^  @虚拟域名的实现始于在浏览器中直接以用户和密码的方式登录FTP服务器的方法。如:在浏览器的地址栏中键入password:username@ftp://my.ftp.com,此时IE就会自动以用户 “username” 和密码 “password”登陆FTP服务器;相当于先在浏览器的地址栏中键入ftp://my.ftp.com,进入登录页面,再在提示下输入用户名和密码一样。这是为什么呢?原来在http1.1协议中,就规定实现了http的访问授权功能,形式就如同上面的password:username@FTP或是以header发送的服务器主机。然后其中的password一项可以省略,也就是说访问username@服务器主机,就等于是以username的身份访问此服务器主机一样,就样我想大家就会明白为什么我们可以用@,而不用其他的符号了吧。所以说guestbook@luyu.net,实际上就是以guestbook的用户来访问luyu.net主机,可为什么能访问到留言簿的页面呢?其实这只是个简单的页面跳转功能而以,具体的在下面将讨论到。  ' E  w& P4 {. z; a

5 `4 U" @4 _  s( D+ V  实现跳转的功能就是指当用户进入一个页面时,此页面会自动的链接到一个新的页面。例如:你在打http://luyu.net时,进入的其实不是http://luyu.net/index.html或是http://luyu.net/default.html而是def.html。这可是不我自作多情修改了服务器的默认连接文档,况且大部分情况上你也修改不了(因为不是自己的服务器)。其实你在打http://luyu.net时,浏览器还是先进入default.html页面,然后由里面的javascript来进行转向,不信的话,你可以打开我的default.html文档看看就知道了,不过下面我们也会把它贴出来的。  
! G& G) r7 |- L- J% P0 E* ~: i3 p! K/ B" W( i! g+ @
  其实我的default.html文档中只有下面的几行:  . Z% x$ J! P; z

: z2 f; x" v4 ]: S: ^0 t$ c) w  script   # B- H6 V3 c9 i& p! O5 ~
; I% |2 E. ]4 |& Y: }
  this.location = "gourl.asp?user="   this.location.href;   6 v" \( Z  q& v! l+ S
7 b- J- `. M6 U
  /script    J7 Q* y/ J6 J/ z" L2 Z% ]  x6 F8 Q
/ j& C7 W+ c5 ^+ D8 U4 ]" S' C
  只有短短的三行代码,其实他的作用就是实现转向,当网友输入http://bbs@luyu.net时,实际上这段代码就是将这个值赋给user变量,并转送给gourl.asp文件中去,以便处理。其实user的值关键就在于@前的http://后的那些字符,在这儿是“BBS”,而http://guestbook@luyu.net中就是“guestbook”。我们得到这些字符后,再进行相应的转向其真实的网址。  ' {6 M/ T1 I+ F0 T' V' Q, U
) @2 w7 K2 R9 h& w# y4 B, U
  如:如果得到的值的“BBS”,我们就转到http://luyu.net/free这个网址。那么如果知道是http://luyu.net/free呢,我们可以通过文本或数据库等来来读。这里我们选择ACCESS数据库,因为管理起来比较方便,而且支持ASP的主机一般都是支持ACCESS的。  ( t9 B0 [4 h. n
- d' x7 a: x! m+ K9 `( t- K
  下面是库中的url表结构:  : W$ C0 X6 t% d/ z8 o
( B& U1 Z7 m- X  k# ~) g% [8 Z7 _2 X
  字段名 字段类型 字段默认值 //功能注释  
& W5 H5 Q+ }% l7 h
% Q5 v% ^6 x, O) a0 b* c- _  id int 自增 关键字 1 不用user做关键字是怕其中有中文字符  : l+ M. K' O' }, v

5 u- I( y/ m4 W$ d# b  user 字符型 null 如BBS或GUESTBOOK的值  6 y: `& o- d& r1 H  y6 O
3 N. n( Y: [) T: ?
  url 字符型 null 转向的网址  
+ ^) r8 z/ s8 R) I! S8 k$ p$ H% n# F* S2 w6 u
  click int 0 访问量  6 f, y' z, W( p
; V, ?6 F0 o: Z. L0 n4 a2 W, w
  表里的字段很少,只有4个,网友可以根据需要再增加一些功能字段,如是否有弹出窗口广告,访问量分析等。不过必要的就是user字段和url字段,因为我们必须要得到user的值,再根据它得到其转向url网址,再在gourl.asp中实现转向就行了。  
% Q) I1 a" [% N' ]( n' P( m4 W) P, i- B- H, f2 ~9 s
  下面是gourl.asp中实现转向的全部程序(我会在程序中写下注释):  & T% B, n* P! |+ y
' M, U# z3 z/ I1 b* n
* b1 c6 H8 `+ b
  dim conn,dbs //定义变量  
  l& I" }2 x  Q6 d; \0 x& Q, C- a+ _! a4 a
  Set conn=Server.CreateObject("ADODB.Connection") //建立连接对象  
+ O) D4 l- E( I  {% j3 U- J4 L9 O! I: q9 A" ]' i
  dbs=server.mappath("url.mdb") //定义要连接的数据库路径  5 b1 v4 _9 U# X
( l0 e% C  @& g. }2 ]6 c5 U& \
  conn.open "driver={microsoft access driver (*.mdb)};dbq="dbs //打开并实现其数据库源的链接  
. d; y: E2 R- ~2 Y: z& q; O% M$ Z9 k8 s: W2 m
  user=trim(request.querystring("user")) //得到default.html文件中得到的在浏览器中输入的网址  4 w+ y; W+ W$ w  I- n

5 b0 X+ ^8 V  [0 v: b  if user"" then //当user值不为空时  
5 V5 D% M: t; @' A# I, V
$ L8 [5 J. t1 m$ U! D  user=replace(user,"http://","") //将“http://”字符串从user值删去  ( ?4 J' j& p9 ]4 V' z1 c3 w' H" Y2 e

$ L6 I/ B" [6 ^  at=instr(user,"@") //将user值中“@”所在位置赋给变量at  
3 r( o* a& V1 [/ R; B
8 ^" Q% @3 E8 w$ D% x. f6 q% @  else  
, S' o+ N- W1 b" v8 c* z! O" t+ \: ~. j, K
  response.write "信息出错,请联系moon!" //当user值为空时则告诉网友有错  
  A; c* ~; T( Y4 u. L2 p- Q
' ?( m  h# W: X7 F- z( M  end if  0 M8 M' U/ H1 S
& B6 \9 o! y6 I7 E8 v# ]' g* [
  if at0 then   . s7 f2 T; w5 h; P0 z* E

  b  F$ j; r& l( U, S7 |; B+ e  user=left(user,at-1) //当user值中“@”所在的位置大于0时,将其中的部分重赋给user,如“BBS”或“  GUESTBOOK”等值  . F$ M; T. \" Q7 Y8 Q3 S

9 n' W3 d9 w: ~! ^' {  else  ! @9 J7 l7 x. t2 k" X# h( E
1 y# U4 i5 d5 }0 Q
  response.redirect "def.htm" //如果没有得到其中的值,如打http://www.luyu.net时,就返回def.htm文件中。  7 |- j. h, {+ ~+ k' N! n, J

& `; r. P. E7 e/ O9 [! a. J  response.end //停止输出  + L( V/ R+ q6 c  P. P7 J8 N
: o0 h; e3 q# B6 S2 r) H3 H
  end if  / W( H5 A& T/ l; P; y
6 A: }( g+ j( h! q6 e
  if user"" then  
! J- B* p! i. n$ s+ Z7 j3 m8 o$ I
; k6 D9 m( o  O% y+ A' D- h  set rs=conn.execute("select url from dns where user='"user"'") //当user值不为空时,连接数据库,将进行搜索  ( @5 d2 ^' N7 b; i
4 Z$ b6 D3 L" T6 }! m
  if not rs.eof then  % q) n$ ~  Q! h4 ?/ p( y* o  d
/ X/ X8 \; _, w! X3 K( Z, C; [
  conn.execute(“update url set click=click ! Where user=’”user”’”)//当记录不为空时,将此网站的访问量加1  ) \; B7 P: G) C; P

9 p1 F" G' T  x5 y  e  Y  response.redirect rs("url") //再转向其网站  
0 k3 M. u- C$ I# D. D6 f" ^) |: u" ^$ W% o
  else  ) r5 E! J4 ]4 L+ T

: g3 w/ t- D- z  response.write "抱歉,没有这个网站!" //记录为空时,警告网友没有此网站  4 {, C8 }7 z6 q# u5 w* z3 X' M
( q) O3 W0 I5 S* S5 F# m1 \
  end if  ' g" h4 r* r+ ^
( t& a- z% I( A! Z
  set rs=nothing   
) T. Q% I+ s3 k; P$ t7 c+ R/ _
+ y8 ^. T  S7 W3 A5 }  else  
+ T$ P0 M5 z! ^$ |. V* n0 Z
) ^4 C0 W) }- i0 X& p- F, U6 z  response.write"抱歉,没有这个域名!" //当user的值为空时,则警告网友没有此域名  
# a4 Q% v, s! N0 c- m  g; u) h. Q
9 q. ?7 ]1 f! U- {  end if  9 R( o. k, ]8 u9 H

: W) f& O/ k4 o, p1 Q3 i" Q  set conn=nothing //关闭数据库连接  
0 x, i2 s8 _# f5 D. `
, b& C$ y: |% B6 u
0 j+ v2 g* F2 s  如果想在访问虚拟域名时做个弹出窗口,以帮自己做个广告的话,可以在将上面的代码改成:    d; P% N* O: \

' P2 t$ t1 Q3 i  f, Q& V  script 4 Z' S" K: h5 Z3 h
  window.open("http://luyu.net","网络随笔","width=350,height=450");   7 Z7 o1 a9 g9 b( u

! o" V0 @$ b) p  this.location = "gourl.asp?user="   this.location.href;  
4 m0 d3 v6 k3 s5 p+ |. Q6 w  ^3 v- v# `. K. I) T. v' @
  /script   0 U0 i  ?4 ^) E  Y, R! d" O5 s

2 L9 f9 T$ d2 H, p6 A( E! \  F' L  好了,这样一个域名访问系统就简单的做好了。如果和PHP或是JSP等来实现的话,原理也是一样的,我相信大家看了这篇文章都可以做出来了。只是把gourl.asp文件改一下便可。  
0 r( t2 ^2 {2 L* B* v1 d, d% Z7 P3 p' g8 r4 L' F' @% m
  当然如果再加上管理系统就更会变得非常的完善,网友可以自己写写看,也可以参考我的下一篇(管理篇)。由于本人水平有限,错误在所难免,希望大家提提意见。如果问题或想看PHP和JSP版本的程序请访问http://luyu.net社区,给我留言,谢谢。



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题