完成WEB中的@虛擬域名系統(tǒng)(原理篇)
發(fā)表時(shí)間:2023-08-13 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]找到了這遍很好的東東哦,奉獻(xiàn)給大家。大家以后不用花錢注冊(cè)域名了,呵呵! 很多網(wǎng)友可能發(fā)現(xiàn),現(xiàn)在在一些網(wǎng)站中,特別是個(gè)人網(wǎng)站中發(fā)現(xiàn)有使用youname@xxx.com的虛擬域名。當(dāng)我告訴我朋友的時(shí)...
找到了這遍很好的東東哦,奉獻(xiàn)給大家。大家以后不用花錢注冊(cè)域名了,呵呵!
很多網(wǎng)友可能發(fā)現(xiàn),現(xiàn)在在一些網(wǎng)站中,特別是個(gè)人網(wǎng)站中發(fā)現(xiàn)有使用youname@xxx.com的虛擬域名。當(dāng)我告訴我朋友的時(shí)候他們都說(shuō)這不是電子郵件的地址嗎?其實(shí)本來(lái)確實(shí)是的,不過(guò)要是將它輸入到瀏覽器的地址中時(shí),它就不是了,而是地地道道地一個(gè)子級(jí)域名。不信的話,你在瀏覽器中輸入http://bbs@luyu.net和http://guestbook@luyu.net看看。是不是發(fā)現(xiàn)他們是兩個(gè)不同的地址呢,前者是本站BBS登錄頁(yè),后者是本站留言簿,而本站卻是首頁(yè)是http://luyu.net,很酷吧。 有的網(wǎng)友也問(wèn)為什么不用http://bbs.luyu.net和http://guestbook.luyu.net做虛擬域名呢,這才是真正的二級(jí)子域名啊。因?yàn)檫@在實(shí)現(xiàn)方面沒(méi)什么不同,只是“。”在域名中的作用可大不一樣,你可以用http://www.luyu.net訪問(wèn),確不是http://www@luyu@net吧,因?yàn)椤!币紤]到一個(gè)解析解碼的問(wèn)題。所以要做“!钡奶摂M域名必須要讓域名服務(wù)商開(kāi)通泛域名的作用,就是只要在瀏覽器的地址欄中鍵入*.luyu.net的域名,都會(huì)先到luyu.net服務(wù)器上去請(qǐng)求解析解碼服務(wù),這樣的話,實(shí)現(xiàn)起無(wú)限多個(gè)免費(fèi)的“!碧摂M域名就不是難是了。關(guān)鍵大部分泛域名的開(kāi)通是要收100到200元人民幣的,所以我們暫不考慮而考慮用免費(fèi)的@域名了。有的網(wǎng)友也問(wèn)為什么不用“!#$%”其他的符號(hào)而偏偏要用@呢,這一點(diǎn)在看完下面的文章你自然就會(huì)明白了。
通過(guò)本文章你就可以做出屬于自己的@域名了。到時(shí)候自己就是管理員,想加什么鏈接都可以,包括中文的,想想直接打http://壁紙@luyu.net那多爽啊。不過(guò)中文要注意的是UTF-8規(guī)范問(wèn)題。
下面我們就先講一下實(shí)現(xiàn)@虛擬域名的方方面面。
@虛擬域名的實(shí)現(xiàn)始于在瀏覽器中直接以用戶和密碼的方式登錄FTP服務(wù)器的方法。如:在瀏覽器的地址欄中鍵入password:username@ftp://my.ftp.com,此時(shí)IE就會(huì)自動(dòng)以用戶 “username” 和密碼 “password”登陸FTP服務(wù)器;相當(dāng)于先在瀏覽器的地址欄中鍵入ftp://my.ftp.com,進(jìn)入登錄頁(yè)面,再在提示下輸入用戶名和密碼一樣。這是為什么呢?原來(lái)在http1.1協(xié)議中,就規(guī)定實(shí)現(xiàn)了http的訪問(wèn)授權(quán)功能,形式就如同上面的password:username@FTP或是以header發(fā)送的服務(wù)器主機(jī)。然后其中的password一項(xiàng)可以省略,也就是說(shuō)訪問(wèn)username@服務(wù)器主機(jī),就等于是以u(píng)sername的身份訪問(wèn)此服務(wù)器主機(jī)一樣,就樣我想大家就會(huì)明白為什么我們可以用@,而不用其他的符號(hào)了吧。所以說(shuō)guestbook@luyu.net,實(shí)際上就是以guestbook的用戶來(lái)訪問(wèn)luyu.net主機(jī),可為什么能訪問(wèn)到留言簿的頁(yè)面呢?其實(shí)這只是個(gè)簡(jiǎn)單的頁(yè)面跳轉(zhuǎn)功能而以,具體的在下面將討論到。
實(shí)現(xiàn)跳轉(zhuǎn)的功能就是指當(dāng)用戶進(jìn)入一個(gè)頁(yè)面時(shí),此頁(yè)面會(huì)自動(dòng)的鏈接到一個(gè)新的頁(yè)面。例如:你在打http://luyu.net時(shí),進(jìn)入的其實(shí)不是http://luyu.net/index.html或是http://luyu.net/default.html而是def.html。這可是不我自作多情修改了服務(wù)器的默認(rèn)連接文檔,況且大部分情況上你也修改不了(因?yàn)椴皇亲约旱姆⻊?wù)器)。其實(shí)你在打http://luyu.net時(shí),瀏覽器還是先進(jìn)入default.html頁(yè)面,然后由里面的javascript來(lái)進(jìn)行轉(zhuǎn)向,不信的話,你可以打開(kāi)我的default.html文檔看看就知道了,不過(guò)下面我們也會(huì)把它貼出來(lái)的。
其實(shí)我的default.html文檔中只有下面的幾行:
<script>
this.location = "gourl.asp?user=" + this.location.href;
</script>
只有短短的三行代碼,其實(shí)他的作用就是實(shí)現(xiàn)轉(zhuǎn)向,當(dāng)網(wǎng)友輸入http://bbs@luyu.net時(shí),實(shí)際上這段代碼就是將這個(gè)值賦給user變量,并轉(zhuǎn)送給gourl.asp文件中去,以便處理。其實(shí)user的值關(guān)鍵就在于@前的http://后的那些字符,在這兒是“BBS”,而http://guestbook@luyu.net中就是“guestbook”。我們得到這些字符后,再進(jìn)行相應(yīng)的轉(zhuǎn)向其真實(shí)的網(wǎng)址。
如:如果得到的值的“BBS”,我們就轉(zhuǎn)到http://luyu.net/free這個(gè)網(wǎng)址。那么如果知道是http://luyu.net/free呢,我們可以通過(guò)文本或數(shù)據(jù)庫(kù)等來(lái)來(lái)讀。這里我們選擇ACCESS數(shù)據(jù)庫(kù),因?yàn)楣芾砥饋?lái)比較方便,而且支持ASP的主機(jī)一般都是支持ACCESS的。
下面是庫(kù)中的url表結(jié)構(gòu):
字段名 字段類型 字段默認(rèn)值 //功能注釋
id int 自增 關(guān)鍵字 1 不用user做關(guān)鍵字是怕其中有中文字符
user 字符型 null 如BBS或GUESTBOOK的值
url 字符型 null 轉(zhuǎn)向的網(wǎng)址
click int 0 訪問(wèn)量
表里的字段很少,只有4個(gè),網(wǎng)友可以根據(jù)需要再增加一些功能字段,如是否有彈出窗口廣告,訪問(wèn)量分析等。不過(guò)必要的就是user字段和url字段,因?yàn)槲覀儽仨氁玫絬ser的值,再根據(jù)它得到其轉(zhuǎn)向url網(wǎng)址,再在gourl.asp中實(shí)現(xiàn)轉(zhuǎn)向就行了。
下面是gourl.asp中實(shí)現(xiàn)轉(zhuǎn)向的全部程序(我會(huì)在程序中寫下注釋):
dim conn,dbs //定義變量
Set conn=Server.CreateObject("ADODB.Connection") //建立連接對(duì)象
dbs=server.mappath("url.mdb") //定義要連接的數(shù)據(jù)庫(kù)路徑
conn.open "driver={microsoft access driver (*.mdb)};dbq="&dbs //打開(kāi)并實(shí)現(xiàn)其數(shù)據(jù)庫(kù)源的鏈接
user=trim(request.querystring("user")) //得到default.html文件中得到的在瀏覽器中輸入的網(wǎng)址
if user<>"" then //當(dāng)user值不為空時(shí)
user=replace(user,"http://","") //將“http://”字符串從user值刪去
at=instr(user,"@") //將user值中“@”所在位置賦給變量at
else
response.write "信息出錯(cuò),請(qǐng)聯(lián)系moon!" //當(dāng)user值為空時(shí)則告訴網(wǎng)友有錯(cuò)
end if
if at>0 then
user=left(user,at-1) //當(dāng)user值中“@”所在的位置大于0時(shí),將其中的部分重賦給user,如“BBS”或“ GUESTBOOK”等值
else
response.redirect "def.htm" //如果沒(méi)有得到其中的值,如打http://www.luyu.net時(shí),就返回def.htm文件中。
response.end //停止輸出
end if
if user<>"" then
set rs=conn.execute("select url from dns where user='"&user&"'") //當(dāng)user值不為空時(shí),連接數(shù)據(jù)庫(kù),將進(jìn)行搜索
if not rs.eof then
conn.execute(“update url set click=click+! Where user=’”&user&”’”)//當(dāng)記錄不為空時(shí),將此網(wǎng)站的訪問(wèn)量加1
response.redirect rs("url") //再轉(zhuǎn)向其網(wǎng)站
else
response.write "抱歉,沒(méi)有這個(gè)網(wǎng)站!" //記錄為空時(shí),警告網(wǎng)友沒(méi)有此網(wǎng)站
end if
set rs=nothing
else
response.write"抱歉,沒(méi)有這個(gè)域名!" //當(dāng)user的值為空時(shí),則警告網(wǎng)友沒(méi)有此域名
end if
set conn=nothing //關(guān)閉數(shù)據(jù)庫(kù)連接
如果想在訪問(wèn)虛擬域名時(shí)做個(gè)彈出窗口,以幫自己做個(gè)廣告的話,可以在將上面的代碼改成:
<script>
window.open("http://luyu.net","網(wǎng)絡(luò)隨筆","width=350,height=450");
this.location = "gourl.asp?user=" + this.location.href;
</script>
好了,這樣一個(gè)域名訪問(wèn)系統(tǒng)就簡(jiǎn)單的做好了。如果和PHP或是JSP等來(lái)實(shí)現(xiàn)的話,原理也是一樣的,我相信大家看了這篇文章都可以做出來(lái)了。只是把gourl.asp文件改一下便可。
當(dāng)然如果再加上管理系統(tǒng)就更會(huì)變得非常的完善,網(wǎng)友可以自己寫寫看,也可以參考我的下一篇(管理篇)。由于本人水平有限,錯(cuò)誤在所難免,希望大家提提意見(jiàn)。如果問(wèn)題或想看PHP和JSP版本的程序請(qǐng)?jiān)L問(wèn)http://luyu.net社區(qū),給我留言,謝謝。