天天看點

網站二級域名用.net 2.0實作方案

本人所了解有兩種方案,可能還有其的方式,希望大家多多讨論!  

基本思路:  

1. 域名支援泛解析,即是指:把A記錄 *.域名.com 解析到伺服器IP,伺服器IIS中做綁定,綁定時主機頭為空;  

2. 為了實作完全的二級域,建兩個站點,一個為主站用,一個為使用者用,兩個站點目錄都指到一個同一網站目錄  

3. 在Web程式中或取URL來源中的二級域名主機頭,比如:abc.域名.com 中的 abc;  

4. 用擷取來的二級域名名稱,存入Session,友善取用  

5. 用擷取來的二級域名名稱,用URL重寫位址  

實作方法:  

域名A記錄解析不用說了吧 ^_^,就是做一個*.域名.com的A記錄解析到你伺服器IP  

方法一:二級域名URL轉向  

a. 建立站點,在IIS中綁定域名(win2003 - IIS6)  

打開IIS,右擊站點,然後屬性,點選網站項IP位址的進階按鈕,然後點編輯或添加來新增綁定,主機頭值為空.  

下面來擷取URL位址進行分析,下面是過程代碼,用來擷取及判斷主機頭,代碼放在預設文檔的首檔案Index.aspx.cs中  

代碼:

複制C#代碼 儲存代碼

/// <summary> 
///取得二級域主機頭值,并實行轉向 
/// </summary> 
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.域名.com/Error.aspx"); //跳轉到出錯頁面 
        return;
     }

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

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

 到這裡已經可以實作abc.域名.com跳轉到指定的頁面或連結了,但并不是真正的二級域名,隻是URL轉向而已。  

方法二:真正的二級域名  

a . 建立站點  

此時我們需要建立兩個站點,一個主站點、一個二級域站點,二個站點的檔案目錄為同一目錄,其目錄中有Default.aspx及Index.aspx兩個檔案。建立方法如下:  

a). 主站點建立方法參照方法一中的站點建立,不過,主機頭非空,需設為www.域名.com 與 域名.com ,當然,你也可以設定其它不想用來做二級域的主機頭。站點預設通路文檔為:Default.aspx。  

b). 二級域站點建立方法與方法一中的站點建立一樣,其預設通路文檔為:Index.aspx。  

b.現在我們要用到之前建立的二級域站點,我們将使用者的資料放在根目錄下的User目錄中。  

下面是/User目錄中預設文檔(Index.aspx.cs)的過程代碼,主要用途是将二級域名主機頭存入Session,友善調用,也是二級域(使用者區)的首頁檔案  

代碼:

複制C#代碼 儲存代碼

/// <summary> 
///取得二級域主機頭值,存入Session["UserDomainName"]中 
/// </summary> 
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.域名.com//Error.aspx"); //跳轉到出錯頁面 
        return;
     }

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

    //進行特定判斷,及是不要用到做為二級域名的主機頭 
    if (UserDomainName.ToLower() == "www" ||
         UserDomainName.ToLower() == "域名" ||
         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.......g.mspx?mfr=true

web.config 中的重寫方法是:  

代碼:

複制XML代碼 儲存代碼

<RewriterRule> 
<LookFor>~/Index/.aspx</LookFor> 
<SendTo>~/User/Index.aspx</SendTo> 
</RewriterRule>      

<RewriterRule> <LookFor>~/Index/.aspx</LookFor> <SendTo>~/User/Index.aspx</SendTo> </RewriterRule>

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

代碼:

複制XML代碼 儲存代碼

<RewriterRule> 
<LookFor>~/test/.aspx</LookFor> 
<SendTo>~/User/test.aspx</SendTo> 
</RewriterRule>      

<RewriterRule> <LookFor>~/test/.aspx</LookFor> <SendTo>~/User/test.aspx</SendTo> </RewriterRule>

然後,test.aspx自身通過擷取Session["UserDomainName"]的值或通過URL或取,來顯示二級域主機頭名稱。  

當然,你也可以直接将二級域站點單獨綁定到這個User使用者目錄,取得URL中的主機頭(使用者名),但這樣可能失去了與主站資料通訊的友善性。

引用:http://www.chenjiliang.com/Article/View.aspx?ArticleID=2225&TypeID=5