top
Loading...
實現WEB中的@虛擬域名系統(原理篇)
找到了這遍很好的東東哦,奉獻給大家。大家以后不用花錢注冊域名了,呵呵!

很多網友可能發現,現在在一些網站中,特別是個人網站中發現有使用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元人民幣的,所以我們暫不考慮而考慮用免費的@域名了。有的網友也問為什么不用“!#$%”其他的符號而偏偏要用@呢,這一點在看完下面的文章你自然就會明白了。

通過本文章你就可以做出屬于自己的@域名了。到時候自己就是管理員,想加什么鏈接都可以,包括中文的,想想直接打http://壁紙@luyu.net那多爽啊。不過中文要注意的是UTF-8規范問題。

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

@虛擬域名的實現始于在瀏覽器中直接以用戶和密碼的方式登錄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主機,可為什么能訪問到留言簿的頁面呢?其實這只是個簡單的頁面跳轉功能而以,具體的在下面將討論到。

實現跳轉的功能就是指當用戶進入一個頁面時,此頁面會自動的鏈接到一個新的頁面。例如:你在打http://luyu.net時,進入的其實不是http://luyu.net/index.html或是http://luyu.net/default.html而是def.html。這可是不我自作多情修改了服務器的默認連接文檔,況且大部分情況上你也修改不了(因為不是自己的服務器)。其實你在打http://luyu.net時,瀏覽器還是先進入default.html頁面,然后由里面的javascript來進行轉向,不信的話,你可以打開我的default.html文檔看看就知道了,不過下面我們也會把它貼出來的。

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

<script>

this.location = "gourl.asp?user=" + this.location.href;

</script>

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

如:如果得到的值的“BBS”,我們就轉到http://luyu.net/free這個網址。那么如果知道是http://luyu.net/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,dbs //定義變量

Set conn=Server.CreateObject("ADODB.Connection") //建立連接對象

dbs=server.mappath("url.mdb") //定義要連接的數據庫路徑

conn.open "driver={microsoft 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" //如果沒有得到其中的值,如打http://www.luyu.net時,就返回def.htm文件中。

response.end //停止輸出

end if

if user<>"" then

set rs=conn.execute("select url from dns 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 //關閉數據庫連接


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

<script>
window.open("http://luyu.net","網絡隨筆","width=350,height=450");

this.location = "gourl.asp?user=" + this.location.href;

</script>

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