玩轉虛擬域名◎+ .
不知道大家最近上網是否發現一個新現象,就是有一些網站開始提供“username@server”的虛擬域名服務。由於“@”的魅力,大家紛紛申請,你或許會想:“如果我也能提供這種服務,該多好阿:)人氣肯定不錯!”本文將給大家揭開“@”的“神秘”面紗,讓大家都可以來“@”!(Do u @ today?)
別急,這個並不是電子郵件的地址,是一種虛擬域名,不相信的話可以在浏覽器中訪問“[email protected]”。部分朋友應該使用過IE的FTP功能,就是在浏覽器的地址欄中鍵入“password:username@server”IE就會自動登陸FTP服務器;而在Http1.1協議中,就規定了Http訪問授權功能,形式同樣為“password:username@server”,其中“password:”可以省略,也是是訪問“[email protected]”實際上是以bbs的身份訪問“zphp.com”這個服務器。
那麼我們只是需要將具體的URI傳送給PHP程序,在數據庫中搜索出真實的URL重定向就可以了。
首先我們需要制作一個傳送URI的頁面(作為服務器的默認文檔,一般命名為index.htm);在JS的Window對象中就可以實現這項功能,下面是index.htm的源代碼:
<script>
this.location = ‘gotourl.php?url=' + this.location.href;
</script>
上面的代碼會將浏覽器重定向到gotourl.php,並且通過QueryString給變量$url賦值為當前的URI。
成功將URI傳遞給PHP程序後,就可以進入數據庫查找真實URL,下面是SQL數據庫相對應的table 的結構:
CREATE TABLE domain(
Id int(3) UNSIGNED DEFAULT ‘0' NOT NULL, # 域名ID
Domain char(20) NOT NULL, # 域名
Gotourl char(255) NOT NULL, # 真實的URL
);
建立好了Table,就可以開始編寫gotourl.php了,程序分為三個部分:
1、 分析URL:
$url = preg_replace(“/^http:\\/\\//I”, “”, $url); // 將URL前面的“http://”去掉,不區分大小寫
$url = preg_replace(“/@.+$/”, “”, $url); // 將“@”後面的部分去除
那麼,剩下的URL就只含有“username”的部分了。
為了給數據庫應用,需要對銘感的字符進行處理:
$url = addslashes($url);
2、 搜索真實的URL:
這裡為了實現程序的通用性,使用了一個數據庫的操作類(修改自PHPLib)來操作SQL數據庫:
$db = new dbSql(); // 連接數據庫
$queryString = sprinf(“SELECT gotourl FROM domain WHERE domain='%s';”, $url); // 生成查詢字符串
$gotourl = $db->result($queryString); // 查詢取得結果
3、 重定向:
在PHP中重定向浏覽器有多種方法,在這裡使用比較簡單的HttpHeader來實現:
header(“location: $gotourl”);
附
其實像網易那樣子的“username.yeah.net”的虛擬域名服務和“@”的實現方法大同小異,但是“.”需要以價值200元的DNS泛解析為代價,而“@”所需要的僅僅是:
1、 PHP/SQL數據庫的權限;
2、 真正DNS解析的域名。
如果需要在虛擬域名服務中加入廣告,比如網易的Popup窗口,可以將重定向部分改為:
<script>
window.open("url","nease","width=windth,height=height");
</script>
為了對得起“天地良心”,筆者沒有將合並後完整的程序加上來(騙稿費?),如果大家比較懶,需要完整的代碼(包括了添加等等),可以在http://zphp.com或者http://[email protected]取得。希望大家都有一個好的訪問量。