用asp.net 2.0實現網站二級域名

本人才疏學淺,實現方法可能不是太理想,有點曲折吧,現與大家分享一下 ^O^,希望對新手有所幫助,以下是以www.devin.cn這個域名爲例,讓每個註冊用戶都有自已二級域名,其中abc.devin.cn就是要用到二級域名

基本思路:
1. 域名支持泛解析,即是指:把A記錄 *.devin.cn 解析到服務器IP,服務器IIS中做綁定,綁定時主機頭爲空;
2. 爲了實現完全二級域,建兩個站點,一個爲主站用,一個爲用戶用,兩個站點目錄都指到一個同一網站目錄
3. 在Web程序中或取URL來源中二級域名主機頭,比如:abc.devin.cn 中 abc;
4. 用獲取來二級域名名稱,存入Session,方便取用
5. 用獲取來二級域名名稱,用URL重寫地址

實現方法:
域名A記錄解析不用說了吧 ^_^,就是做一個*.devin.cnA記錄解析到你服務器IP

方法一:二級域名URL轉向
a. 建立站點,在IIS中綁定域名(win2003 - IIS6)
打開IIS,右擊站點,然後屬性,點擊網站項IP地址高級按鈕,然後點編輯或添加來新增綁定,主機頭值爲空,如下圖所示:


這裏只要綁定一個就行了,綁定後如下圖所示:

將此站點默認訪問文檔設爲Index.aspx,。

做好後,不管用什麼樣二級前綴都會訪問到這個網站

 

下面來獲取URL地址進行分析,下面是過程代碼,用來獲取及判斷主機頭,代碼放在默認文檔首文件Index.aspx.cs中

///
///取得二級域主機頭值,並實行轉向
///
public void CheckDomain()
{
HostName = HttpContext.Current.Request.Url.Host.ToString(); //獲取URL主機地址
UserHost = HostName.Split(new Char[] { '.' }); //數組,以“.”分隔

//判斷二級域名地址是否符合abc.域名.com 這種格式,及數組UserHost長度不大於3,否則就跳傳到其它頁
if (UserHost.Length > 3)
{
HttpContext.Current.Response.Redirect("http://www.devin.cn/Error.aspx");//跳轉到出錯頁面
return;
}

UserDomainName = UserHost[0].ToString(); //取得數組最前面一組值,及二級域名主機頭

//進行特定判斷,及是不要用到做爲二級域名主機頭
if (UserDomainName.ToLower() == "www" || UserDomainName.ToLower() == "devin" || UserDomainName == null || UserDomainName.ToString()=="")
{
//你動作
}
else {
HttpContext.Current.Response.Redirect("/User/");//跳轉到用戶目錄,即是二級域名所要去到目錄,當然你也可以跳傳至*.aspx?UserID=xxx這樣鏈接
return;
}

}

到這裏已經可以實現abc.devin.cn跳轉到指定頁面或鏈接了,但並不是真正二級域名,只是URL轉向而已。


方法二:真正二級域名
a.建立站點
此時我們需要建立兩個站點,一個主站點、一個二級域站點,二個站點文件目錄爲同一目錄,其目錄中有Default.aspx及Index.aspx兩個文件。建立方法如下:
a). 主站點建立方法參照方法一中站點建立,不過,主機頭非空,需設爲www.devin.cn 與 devin.cn ,當然,你也可以設置其它不想用來做二級主機頭。站點默認訪問文檔爲:Default.aspx。
b). 二級域站點建立方法與方法一中站點建立一樣,其默認訪問文檔爲:Index.aspx。

b.現在我們要用到之前建立二級域站點,我們將用戶數據放在根目錄下User目錄中。
下面是/User目錄中默認文檔(Index.aspx.cs)過程代碼,主要用途是將二級域名主機頭存入Session,方便調用,也是二級域(用戶區)首頁文件

///
///取得二級域主機頭值,存入Session["UserDomainName"]中
///
public void UserDomainNameSession()
{
HostName = HttpContext.Current.Request.Url.Host.ToString();//獲取URL主機地址
UserHost = HostName.Split(new Char[] { '.' });//數組,以“.”分隔

//判斷二級域名地址是否符合abc.域名.com 這種格式,及數組UserHost長度不大於3,否則就跳傳到其它頁
if (UserHost.Length > 3)
{
HttpContext.Current.Response.Redirect("http://www.devin.cn//Error.aspx");//跳轉到出錯頁面
return;
}

UserDomainName = UserHost[0].ToString();//取得數組最前面一組值,及二級域名主機頭

//進行特定判斷,及是不要用到做爲二級域名主機頭
if (UserDomainName.ToLower() == "www" || UserDomainName.ToLower() == "devin" || UserDomainName == null || UserDomainName.ToString()=="")
{
//你動作
}
else
{
HttpContext.Current.Session["UserDomainName"] = UserDomainName; //將二級域名主機頭存入Session
}
}
//你對Session["UserDomainName"]處理,比如把這個Session["UserDomainName"]值是“abc”,那麼你可以index.aspx?UserName=abc,如果不想使用Session,你可以在需要用到二級域主機頭時,再來通過URL地址獲取。

c.URL重寫
我用是微軟URLRewriter,使用方法參見:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true
web.config 中重寫方法是:


~/Index/.aspx
~/User/Index.aspx

到這裏已經實現二級域了,不管輸入什麼樣主機頭(www.devin.cn 與 devin.cn除外,因爲這兩個域已經綁定到主站點中,優先訪問到了主站點),就可以實現 abc.devin.cn訪問到這個用戶目錄了,而且瀏覽器地址欄,出現也是abc.devin.cn這樣域名地址,爲了保證此二級域訪問其它頁面也保持二級域名屬性,也需同時做URL重寫,在其它頁面如需用到二級域主機頭(用戶名),從Session["UserDomainName"] 中取得即可,比如,要在User目錄中文件 test.aspx ,顯示二級域主機頭名稱,同時需保持瀏覽器地址欄地址爲: abc.devin.cn/test.aspx ,那麼在web.config中添加URL重寫規則:

~/test/.aspx
~/User/test.aspx

然後,test.aspx自身通過獲取Session["UserDomainName"]值或通過URL或取,來顯示二級域主機頭名稱。
當然,你也可以直接將二級域站點單獨綁定到這個User用戶目錄,取得URL中主機頭(用戶名),但這樣可能失去了與主站數據通訊方便性

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章