實現WEB中的@虛擬域名系統(原理篇) (轉)

worldblog發表於2007-12-12
實現WEB中的@虛擬域名系統(原理篇) (轉)[@more@]找到了這遍很好的東東哦,奉獻給大家。大家以後不用花錢註冊域名了,呵呵!


  很多網友可能發現,現在在一些網站中,特別是個人網站中發現有使用youname@xxx.com的虛擬域名。當我告訴我朋友的時候他們都說這不是電子的地址嗎?其實本來確實是的,不過要是將它輸入到的地址中時,它就不是了,而是地地道道地一個子級域名。不信的話,你在瀏覽器中輸入和看看。是不是發現他們是兩個不同的地址呢,前者是本站BBS登入頁,後者是本站留言簿,而本站卻是首頁是,很酷吧。 有的網友也問為什麼不用和做虛擬域名呢,這才是真正的二級子域名啊。因為這在實現方面沒什麼不同,只是“。”在域名中的作用可大不一樣,你可以用訪問,確不是吧,因為“。”要考慮到一個解析解碼的問題。所以要做“。”的虛擬域名必須要讓域名服務商開通泛域名的作用,就是隻要在瀏覽器的位址列中鍵入*.luyu.net的域名,都會先到luyu.net上去請求解析解碼服務,這樣的話,實現起無限多個免費的“。”虛擬域名就不是難是了。關鍵大部分泛域名的開通是要收100到200元人民幣的,所以我們暫不考慮而考慮用免費的@域名了。有的網友也問為什麼不用“!#$%”其他的符號而偏偏要用@呢,這一點在看完下面的文章你自然就會明白了。

  透過本文章你就可以做出屬於自己的@域名了。到時候自己就是管理員,想加什麼連結都可以,包括中文的,想想直接打http://桌布@luyu.net那多爽啊。不過中文要注意的是UTF-8規範問題。

  下面我們就先講一下實現@虛擬域名的方方面面。

  @虛擬域名的實現始於在瀏覽器中直接以和密碼的方式登入伺服器的方法。如:在瀏覽器的位址列中鍵入pass: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主機,可為什麼能訪問到留言簿的頁面呢?其實這只是個簡單的頁面跳轉功能而以,具體的在下面將討論到。

  實現跳轉的功能就是指當使用者進入一個頁面時,此頁面會自動的連結到一個新的頁面。例如:你在打時,進入的其實不是/index.html或是/default.html而是def.html。這可是不我自作多情修改了伺服器的預設連線文件,況且大部分情況上你也修改不了(因為不是自己的伺服器)。其實你在打時,瀏覽器還是先進入default.html頁面,然後由裡面的script來進行轉向,不信的話,你可以開啟我的default.html文件看看就知道了,不過下面我們也會把它貼出來的。

  其實我的default.html文件中只有下面的幾行:

  

</P> <P>  this.location = "gourl.</A>?user=" + this.location.href; </P> <P>  

  只有短短的三行程式碼,其實他的作用就是實現轉向,當網友輸入.net時,實際上這段程式碼就是將這個值賦給user變數,並轉送給gourl.asp中去,以便處理。其實user的值關鍵就在於@前的http://後的那些字元,在這兒是“BBS”,而中就是“guestbook”。我們得到這些字元後,再進行相應的轉向其真實的網址。

  如:如果得到的值的“BBS”,我們就轉到/free這個網址。那麼如果知道是/free呢,我們可以透過文字或等來來讀。這裡我們選擇ACCESS資料庫,因為管理起來比較方便,而且支援ASP的主機一般都是支援ACCESS的。

  下面是庫中的url表結構:

  欄位名 欄位型別 欄位預設值 //功能註釋

  id int 自增 關鍵字 1 不用user做關鍵字是怕其中有中文字元

  user 字元型 null 如BBS或GUESTBOOK的值

  url 字元型 null 轉向的網址

  click int 0 訪問量

  表裡的欄位很少,只有4個,網友可以根據需要再增加一些功能欄位,如是否有彈出視窗廣告,訪問量分析等。不過必要的就是user欄位和url欄位,因為我們必須要得到user的值,再根據它得到其轉向url網址,再在gourl.asp中實現轉向就行了。

  下面是gourl.asp中實現轉向的全部(我會在程式中寫下注釋):


  dim conn,s //定義變數

  Set conn=Server.Create("ADODB.Connection") //建立連線

  dbs=server.mappath("url.mdb") //定義要連線的資料庫路徑

  conn.open "={ access driver (*.mdb)};dbq="&dbs //開啟並實現其資料庫源的連結

  user=trim(request.querystring("user")) //得到default.html檔案中得到的在瀏覽器中輸入的網址

  if user<>"" then //當user值不為空時

  user=replace(user,"http://","") //將“http://”字串從user值刪去

  at=instr(user,"@") //將user值中“@”所在位置賦給變數at

  else

  response.write "資訊出錯,請聯絡moon!" //當user值為空時則告訴網友有錯

  end if

  if at>0 then

  user=left(user,at-1) //當user值中“@”所在的位置大於0時,將其中的部分重賦給user,如“BBS”或“  GUESTBOOK”等值

  else

  response.redirect "def.htm" //如果沒有得到其中的值,如打時,就返回def.htm檔案中。

  response.end //停止輸出

  end if

  if user<>"" then

  set rs=conn.execute(" url from where user=&user&") //當user值不為空時,連線資料庫,將進行搜尋

  if not rs.eof then

  conn.execute(“update url set click=click+! Where user=’”&user&”’”)//當記錄不為空時,將此網站的訪問量加1

  response.redirect rs("url") //再轉向其網站

  else

  response.write "抱歉,沒有這個網站!" //記錄為空時,警告網友沒有此網站

  end if

  set rs=nothing

  else

  response.write"抱歉,沒有這個域名!" //當user的值為空時,則警告網友沒有此域名

  end if

  set conn=nothing //關閉資料庫連線


  如果想在訪問虛擬域名時做個彈出視窗,以幫自己做個廣告的話,可以在將上面的程式碼改成:

  

  好了,這樣一個域名訪問就簡單的做好了。如果和或是等來實現的話,原理也是一樣的,我相信大家看了這篇文章都可以做出來了。只是把gourl.asp檔案改一下便可。

  當然如果再加上管理系統就更會變得非常的完善,網友可以自己寫寫看,也可以參考我的下一篇(管理篇)。由於本人水平有限,錯誤在所難免,希望大家提提意見。如果問題或想看PHP和JSP版本的程式請訪問社群,給我留言,謝謝。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992379/,如需轉載,請註明出處,否則將追究法律責任。

相關文章