二级域名用asp.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中
?
代碼:
??????? /// <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/msdn/library/webservices/asp.net/URLRewriting.......g.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中的主機頭(用戶名),但這樣可能失去了與主站數據通訊的方便性。
?
總結
以上是生活随笔為你收集整理的二级域名用asp.net 2.0的实现方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net 2.0 C#实现压缩/解
- 下一篇: C#与RSS亲密接触