用asp.net 2.0實現網站次層網域

來源:互聯網
上載者:User
帖小小代碼一個,

本人才疏學淺,實現方法可能不是太理想,有點曲折吧,現與大家分享一下 ^O^,希望對新手有所協助,以下是以www.網域名稱.com這個網域名稱為例,讓每個註冊使用者都有自已的次層網域,其中abc.網域名稱.com就是要用到的次層網域

基本思路:
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地址的進階按鈕,然後點編輯或添加來新增綁定,主機頭值為空白,如所示:

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

將此網站預設訪問文檔設為Index.aspx,。

做好後,不管用什麼樣的二級首碼都會訪問到這個網站。

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

        /// <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,方便調用,也是二級域(使用者區)的首頁檔案

        /// <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/m ... iting.mspx?mfr=true
web.config 中的重寫方法是:
                        <!--User區主機頭URL重寫,實現當abc.網域名稱.com訪問網站時,經二級域網站,預設首檔案為Index.aspx,將Index.aspx地址修正到/User/Index.aspx-->
                        <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重寫規則:
                        <RewriterRule>
                                <LookFor>~/test/.aspx</LookFor>
                                <SendTo>~/User/test.aspx</SendTo>
                        </RewriterRule>

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.