过期域名预定抢注

 找回密碼
 免费注册

[轉貼]如何開發一個虛擬域名系統

[複製鏈接]
發表於 2004-12-21 11:24:34 | 顯示全部樓層 |閱讀模式
大家在使用諸如yourname.yeah.net這樣的簡記域名時都感到十分方便,有很多人在想:我要是能讓自己的服務器也能夠實現簡記域名就好了。其實這並不複雜。看完了本文,你也可以做一個簡記域名系統。   : ]: T" y0 {* Y5 m1 j5 Z

! X& x) N8 _. r* Q6 E4 C  簡記域名系統的關鍵技術在於:實現Web頁面的重定向(Redirctory)。在本質上,簡記域名系統和虛擬機系統完全不同。虛擬機的虛擬域名和IP是存在一一對應關係的。而簡記域名系統不需要將域名和IP做一一映射。也就是說,它根本不需要複雜的域名解析機制和虛擬機來完成,它所做的事情就是當你在請求yourname.somedomain時,將你的瀏覽器重新定向到你本來存放Html頁面的地方。   
! X$ z- }7 J9 X& p3 S, F( v5 A6 F, X6 W5 L  i4 D- V! W* }. p' w6 l
  為了說明的更完善,下面圖例:   ' m" u) U; W0 B$ a' e' P

1 R+ _2 T; a* I; y4 |  我提供的源程序是運行環境是: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作為默認的首頁。   
7 `* T8 N' M7 s6 I- w  設置DNS服務器,使其能對泛域名解析。一般的Unix和Linux系統的DNS解析都是由Bind守護程序完成的,Bind4和Bind8的配置文件分別/etc/named.boot和name.conf,配置時根據你的系統修改。設置Bind的配置文件/etc/named.boot,在其中加入「primary domain.com db.domain」一句,添加一個新的域記錄。在/etc/name.conf中加入:   
( F/ R+ Y+ p5 v. o' @$ G  }  |# l7 H) f% v% H9 G
  zone "domain.com" {   3 E6 o8 i# H4 e# A/ i* }. H* B
  type master;   6 J3 h9 ?* v* `
  file "db.domain」;   5 H" P7 b: ], Z; @$ N+ u' X
  };   $ H6 e/ F) g7 N# k
  在/var/name/中新建主域記錄文件db.domain,其格式為:   6 l2 E- r0 @" ], X8 S
  N SOA dns.domain.com root.domain.com (   
; f" u" s" i  e0 K. q. T' H$ D" Z( _  199811291 ;Serial   
6 q* s/ K. H4 W  28800 ;refresh   ' u) h+ U  c7 ?  K
  7200 ;retry   , K4 \% d+ Y; \6 F2 s4 d$ l
  604800 ;expire   
; w$ l9 f$ l2 G. a  I  86400) ;minimum   2 q6 X+ y* C  l  [8 q
  dns   5 L2 o5 V% N/ _
  MX 10 dns.domain.com.   
" L4 e; ~2 `4 K% b6 g  dns A 202.115.135.50   
3 g; A& }; @% f- z' s  www A 202.115.135.50   9 s0 Q+ V6 p" z* R6 I
  * A 202.115.135.50   
/ Z+ o$ @1 k2 b  Y$ ?0 }$ w% C; ^0 K  關鍵是最後一句,即將整個域可能出現未做標記的所有Hostname全部指向同一IP。 執行/usr/sbin/ndc reload,重新加載域名數據庫。測試一下,此時應該隨便ping一個domain域內的主機(除已經標記的),都指向了指定的IP,那麼DNS服務器設置完成。   % W; B% [1 s8 w1 Q+ D

5 R5 K& V& K3 S5 C& h2 P
; h/ _1 I. Q( c% O6 H  最後一步是編製PHP3腳本。我們剛才已經在圖中詳細的說明了整個的原理,所以寫一個重新定向的程序就不是很難了。   
% g/ f3 F5 S8 P" J9 J5 [0 x3 J- V- F# o: n, @& V8 z1 u

5 z8 o. Z9 K. v% @  讓我們來看一個由IE5.0送出的完整HTTP頭信息:   
3 @3 b- r$ I4 p' P6 k( X/ Q* F% l+ [3 b* L- c
4 ]5 f5 d5 N4 V+ G0 `$ g- A
  Accept: application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,      image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*   
* \- C4 k* J8 n7 d; B; [' e  I  Accept-Encoding: gzip, deflate   
# N) P5 f/ v& {+ m; m( k7 M, E  Accept-Language: zh-cn   
$ I4 P3 e% b/ p9 t2 [$ J  Connection: Keep-Alive   
2 {" ?$ i" s9 _- F4 U  Host:ww.yahoo.com   
1 _0 P% n& V% P: m; G6 ^' g  User-Agent: Mozilla/4.0 (compatible; MSIE 5.0b1; Windows 98)   3 `7 a- s; ]) L$ Y% V
  我們需要在整個HTTP頭信息中取出Host信息,然後http://www.jj.jx.cn/www.xxx.xxx/default.htm形式的第一部分「www」,即HostName(也即是用戶註冊的name)單獨取出,作為重定向檢索的關鍵字。   9 e9 e) Y6 E, h: P& ?, V

6 ~6 e0 _: Q0 V; d3 G6 o, X6 R
  檢索到用戶註冊的URL信息後,我們給用戶瀏覽器送一個重定向命令「Localtion: http://www.jj.jx.cn/somewhere/sample.html」,將用戶重定向到指定頁面。   3 T0 C+ g4 T, B; X/ I
4 w. f1 J/ c: x, |* b1 k
' g: A' a7 x9 ~& J
  在PHP3中,有函數GetAllHeader(),取得瀏覽器送出的HTTP頭信息。我們主要需要使用此函數來完成整個程序。   
8 E- g* `1 H) g- R& {8 D9 ]0 _& i0 F: }) e
# C; b- q# u8 \) c
  後面附有源程序,由於只是實驗性質的,所以在查詢用戶信息時,沒有使用數據庫,如果整個系統要實際應用的話,一定要和數據庫掛接起來,不然查詢用戶信息的過程將是十分漫長,大大影響效率,而且用戶數據的管理也不方便。(由於篇幅限制,沒有給出註冊和管理所需的寫記錄程序,請自行添加)   
$ }& A3 b! c% y6 e  Y
% u* m+ W# a( m, V* V) j- W+ P6 L9 g# ]7 ?
  在源程序中,所有用戶信息記錄在data子目錄下user.dat文件中。其格式為:   $ s, _  G% Y+ C% A
& s* s6 l/ z+ o. R+ x
( O& D0 G2 Q% g7 p8 n* j# O
  username:   7 S: v/ o  W0 {' k0 Q

6 v' C5 E" c! v6 f8 D# G7 V! z0 _* c, U8 ^& P+ u  P2 j) H6 E
 http://octopus.cdit.edu.cn/~qap213/index.html ;  9 v9 H2 e- D  H1 o, T1 i
$ ]5 P* ^. }7 G' \) m" w6 d

: Q0 q5 U* o" q  附PHP3源程序:   / G  I; ^+ {% f% B/ L; T5 m$ G

9 @( _0 F) O$ ]+ r! A# R+ U" Z& J
0 X7 M! }. B* ~7 @, I5 W1 g <?   : d: J2 E0 U- `) m" K. O+ D
  //Get HTTP』s Header and parse it//   , v$ q, X6 s5 \/ ?/ m; ~1 H
 $headers = getallheaders();   $ v, J6 s/ J* c' w$ d- k3 p
  while (list($header, $value) = each($headers)) {   . }3 w- G/ x9 D$ m
  if($header=="Host"){$username= strtok($value,".");}}   ! C# A; z2 m, Y5 D$ b
  //Jump out the Banner's Window//   
5 p' |; N( {& [+ [0 \8 Z* t  echo '<script language="JavaScript">',   . `9 U# ]" |% h$ I1 `( v5 X
  'msg=window.open("banner.htm","sample",   # J. N& g$ ^* J- g- H
   "toolbar=no","directories=no",directories=no","menubar=no");』,   
% C  Q2 O$ [5 g+ g3 Z0 g5 Q# ~, K   '</script>';   
5 W7 _4 f6 n, y9 p  // seek the user information from the recorded file//   
9 R: {5 e" V' W, r  if(!$usrinfo=file("data/user.dat")){echo "Open Data File Error!!";}   
# V; [7 e& f: q: u' _2 s- x" Y  $url="http://";   
: t+ R! s+ Z, a5 t, Y) u% }  for($i=0;$i<count($usrinfo);$i++)   
6 F% @" U) E- ]! Z' t  if(strtok($usrinfo[$i],":")==$username){   ' ]5 f3 o% B* m0 n
  $url=$usrinfo[$i+1];   
6 r1 J1 ~; ?& q- v5 `  }   
2 |; V+ n' G) s% j, M$ _% q  if($url=="http://"){echo "not found the uesrname of Data!";}   
% }3 C: t5 k1 d1 {; c  else{   
. y6 A# D3 i8 p1 [1 c1 f5 _& g3 _  echo '<meta http-equiv="refresh" content="0;','url=',$url,'">';}     q0 M  L# [1 g( W1 ^5 p+ W) U& L
  ?>    + o5 N1 h$ u4 K: A
4 k0 P$ }- o5 k4 A# r8 d& ^( p3 N

& H+ \( x3 x, r' Q' s  --END--
發表於 2004-12-22 20:41:40 | 顯示全部樓層
頂一下
回復 给力 爆菊

使用道具 舉報

發表於 2004-12-27 16:14:18 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復 给力 爆菊

使用道具 舉報

發表於 2004-12-30 09:27:47 | 顯示全部樓層
頂。。。好帖。。
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基

GMT+8, 2026-4-18 06:39

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表