下面我們就先講一下實(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ì)在程序中寫(xiě)下注釋):
dim conn,dbs //定義變量 218.61.235.67 丹東學(xué)校主機(jī)
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(" 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文件改一下便可。
我們從域名服務(wù)商那里注冊(cè)的域名(頂極域名),一般都會(huì)免費(fèi)提供域名解析。但這種域名解析只能把域名解析導(dǎo)靜態(tài)IP地址上。要想把域名解析到動(dòng)態(tài)IP地址上,還需要購(gòu)買(mǎi)動(dòng)態(tài)域名解析服務(wù)。利用別名(CName)記錄就可以把域名免費(fèi)解析到動(dòng)態(tài)IP上。
域名的幾個(gè)概念 域名A記錄: A(Address)記錄是域名與IP對(duì)應(yīng)的記錄。
域名別名記錄:別名(CName,Canonical Name)記錄,是域名與域名的別名對(duì)應(yīng)的記錄。
動(dòng)態(tài)域名解析:A記錄中域名對(duì)應(yīng)的IP是靜態(tài)IP,把域名解析到動(dòng)態(tài)IP上,就叫動(dòng)態(tài)域名解析。
域名服務(wù)商一般只免費(fèi)提供A記錄,不免費(fèi)提供 動(dòng)態(tài)域名解析。
如何把頂級(jí)域名免費(fèi)解析到動(dòng)態(tài)IP上呢?
1. 到動(dòng)態(tài)域名解析服務(wù)商那里,申請(qǐng)1個(gè)免費(fèi)的二級(jí)域名(該二級(jí)域名可解析到動(dòng)態(tài)IP上)。
提供動(dòng)態(tài)域名解析服務(wù)商很多,比如:花生殼,88IP,金萬(wàn)維 等。
以花生殼為例,申請(qǐng)免費(fèi)二級(jí)域名的步驟如下:
1)注冊(cè)一個(gè)花生殼(Oray)護(hù)照;
2)登錄花生殼護(hù)照,到 域名服務(wù) > 域名注冊(cè) > 免費(fèi)域名 注冊(cè)一個(gè)免費(fèi)域名。
3)然后進(jìn)入 我的控制臺(tái) > 花生殼服務(wù) > 花生殼管理,激活你注冊(cè)的域名。
4)下載花生殼客戶端。
5)安裝花生殼客戶端,并運(yùn)行之。
假如你在花生殼申請(qǐng)的二級(jí)域名是:myfpt.xicp.net。
2. 給自己的頂級(jí)域名添加別名(CName)記錄。
假如你的頂級(jí)域名是:www.abc.com
到你的頂級(jí)域名服務(wù)商網(wǎng)站,在域名解析管理里,添加一個(gè)別名記錄:
myftp.abc.com <CName> myftp.xicp.net 即,myftp.abc.com 是 myftp.xicp.net 的別名。
以后在訪問(wèn) http://myftp.abc.com 就等于 http://myftp.xicp.net,
但是瀏覽器中顯示的依然是 http://myftp.abc.com 。
幾點(diǎn)說(shuō)明 1)花生殼客戶端可以安裝在你的局域網(wǎng)內(nèi)的任何一臺(tái)電腦上(其他動(dòng)態(tài)域名解析的客戶端也一樣)。
2)一個(gè)域名可以有多個(gè)別名記錄,比如:
myftp1.abc.com <CName> myftp.xicp.net
myftp2.abc.com <CName> myftp.xicp.net
myftp2.abc.com <CName> myftp.xicp.net
myftp1.abc.com,myftp2.abc.com,myftp3.abc.com 都是 myftp.xicp.net 的別名。