下面我們就先講一下實現@虛擬域名的方方面面。
@虛擬域名的實現始于在瀏覽器中直接以用戶和密碼的方式登錄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 //定義變量 218.61.235.67 丹東學校主機
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(" this.location = "gourl.asp?user=" + this.location.href;
</script>
好了,這樣一個域名訪問系統就簡單的做好了。如果和PHP或是JSP等來實現的話,原理也是一樣的,我相信大家看了這篇文章都可以做出來了。只是把gourl.asp文件改一下便可。
我們從域名服務商那里注冊的域名(頂極域名),一般都會免費提供域名解析。但這種域名解析只能把域名解析導靜態IP地址上。要想把域名解析到動態IP地址上,還需要購買動態域名解析服務。利用別名(CName)記錄就可以把域名免費解析到動態IP上。
域名的幾個概念 域名A記錄: A(Address)記錄是域名與IP對應的記錄。
域名別名記錄:別名(CName,Canonical Name)記錄,是域名與域名的別名對應的記錄。
動態域名解析:A記錄中域名對應的IP是靜態IP,把域名解析到動態IP上,就叫動態域名解析。
域名服務商一般只免費提供A記錄,不免費提供 動態域名解析。
如何把頂級域名免費解析到動態IP上呢?
1. 到動態域名解析服務商那里,申請1個免費的二級域名(該二級域名可解析到動態IP上)。
提供動態域名解析服務商很多,比如:花生殼,88IP,金萬維 等。
以花生殼為例,申請免費二級域名的步驟如下:
1)注冊一個花生殼(Oray)護照;
2)登錄花生殼護照,到 域名服務 > 域名注冊 > 免費域名 注冊一個免費域名。
3)然后進入 我的控制臺 > 花生殼服務 > 花生殼管理,激活你注冊的域名。
4)下載花生殼客戶端。
5)安裝花生殼客戶端,并運行之。
假如你在花生殼申請的二級域名是:myfpt.xicp.net。
2. 給自己的頂級域名添加別名(CName)記錄。
假如你的頂級域名是:www.abc.com
到你的頂級域名服務商網站,在域名解析管理里,添加一個別名記錄:
myftp.abc.com <CName> myftp.xicp.net 即,myftp.abc.com 是 myftp.xicp.net 的別名。
以后在訪問 http://myftp.abc.com 就等于 http://myftp.xicp.net,
但是瀏覽器中顯示的依然是 http://myftp.abc.com 。
幾點說明 1)花生殼客戶端可以安裝在你的局域網內的任何一臺電腦上(其他動態域名解析的客戶端也一樣)。
2)一個域名可以有多個別名記錄,比如:
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 的別名。