用asp.net 2.0实现网站二级域名(转)
基本思路:
1. 域名支持泛解析,即是指:把A記錄 *.域名.com??解析到服務(wù)器IP,服務(wù)器IIS中做綁定,綁定時(shí)主機(jī)頭為空;
2. 為了實(shí)現(xiàn)完全的二級(jí)域,建兩個(gè)站點(diǎn),一個(gè)為主站用,一個(gè)為用戶用,兩個(gè)站點(diǎn)目錄都指到一個(gè)同一網(wǎng)站目錄
3. 在Web程序中或取URL來源中的二級(jí)域名主機(jī)頭,比如:abc.域名.com 中的 abc;
4. 用獲取來的二級(jí)域名名稱,存入Session,方便取用
5. 用獲取來的二級(jí)域名名稱,用URL重寫地址
實(shí)現(xiàn)方法:
域名A記錄解析不用說了吧 ^_^,就是做一個(gè)*.域名.com的A記錄解析到你服務(wù)器IP
方法一:二級(jí)域名URL轉(zhuǎn)向
a. 建立站點(diǎn),在IIS中綁定域名(win2003 - IIS6)
打開IIS,右擊站點(diǎn),然后屬性,點(diǎn)擊網(wǎng)站項(xiàng)IP地址的高級(jí)按鈕,然后點(diǎn)編輯或添加來新增綁定,主機(jī)頭值為空,如下圖所示:
這里只要綁定一個(gè)就行了,綁定后如下圖所示:
將此站點(diǎn)默認(rèn)訪問文檔設(shè)為Index.aspx,。
做好后,不管用什么樣的二級(jí)前綴都會(huì)訪問到這個(gè)網(wǎng)站。
下面來獲取URL地址進(jìn)行分析,下面是過程代碼,用來獲取及判斷主機(jī)頭,代碼放在默認(rèn)文檔的首文件Index.aspx.cs中
? ?? ???/// <summary>
? ?? ???///取得二級(jí)域主機(jī)頭值,并實(shí)行轉(zhuǎn)向
? ?? ???/// </summary>
? ?? ???public void CheckDomain()
? ?? ???{
? ?? ?? ?? ?HostName = HttpContext.Current.Request.Url.Host.ToString(); //獲取URL主機(jī)地址
? ?? ?? ?? ?UserHost = HostName.Split(new Char[] { '.' });??//數(shù)組,以“.”分隔
? ?? ?? ?? ?//判斷二級(jí)域名地址是否符合abc.域名.com 這種格式,及數(shù)組UserHost長(zhǎng)度不大于3,否則就跳傳到其它頁
? ?? ?? ?? ?if (UserHost.Length > 3)
? ?? ?? ?? ?{
? ?? ?? ?? ?? ? HttpContext.Current.Response.Redirect("http://www.域名.com/Error.aspx");? ? ? ? //跳轉(zhuǎn)到出錯(cuò)頁面
return;
? ?? ?? ?? ?}
? ?? ?? ?? ?UserDomainName = UserHost[0].ToString();? ? //取得數(shù)組最前面一組值,及二級(jí)域名主機(jī)頭
? ?? ?? ?? ?//進(jìn)行特定判斷,及是不要用到做為二級(jí)域名的主機(jī)頭
? ?? ?? ?? ?if (UserDomainName.ToLower() == "www" || UserDomainName.ToLower() == "域名" || UserDomainName == null || UserDomainName.ToString()=="")
? ?? ?? ?? ?{
? ? ? ? ? ? ? ? //你的動(dòng)作
? ?? ?? ?? ?}
? ?? ?? ?? ?else {
? ?? ?? ?? ?? ? HttpContext.Current.Response.Redirect("/User/");? ? ? ? //跳轉(zhuǎn)到用戶目錄,即是二級(jí)域名所要去到的目錄,當(dāng)然你也可以跳傳至*.aspx?UserID=xxx這樣的鏈接
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ?? ?? ?? ?}
? ?? ???}
到這里已經(jīng)可以實(shí)現(xiàn)abc.域名.com跳轉(zhuǎn)到指定的頁面或鏈接了,但并不是真正的二級(jí)域名,只是URL轉(zhuǎn)向而已。
方法二:真正的二級(jí)域名
a.? ? ? ? 建立站點(diǎn)
此時(shí)我們需要建立兩個(gè)站點(diǎn),一個(gè)主站點(diǎn)、一個(gè)二級(jí)域站點(diǎn),二個(gè)站點(diǎn)的文件目錄為同一目錄,其目錄中有Default.aspx及Index.aspx兩個(gè)文件。建立方法如下:
a). 主站點(diǎn)建立方法參照方法一中的站點(diǎn)建立,不過,主機(jī)頭非空,需設(shè)為www.域名.com??與 域名.com ,當(dāng)然,你也可以設(shè)置其它不想用來做二級(jí)域的主機(jī)頭。站點(diǎn)默認(rèn)訪問文檔為:Default.aspx。
b). 二級(jí)域站點(diǎn)建立方法與方法一中的站點(diǎn)建立一樣,其默認(rèn)訪問文檔為:Index.aspx。
b.? ? ? ? 現(xiàn)在我們要用到之前建立的二級(jí)域站點(diǎn),我們將用戶的數(shù)據(jù)放在根目錄下的User目錄中。
下面是/User目錄中默認(rèn)文檔(Index.aspx.cs)的過程代碼,主要用途是將二級(jí)域名主機(jī)頭存入Session,方便調(diào)用,也是二級(jí)域(用戶區(qū))的首頁文件
? ?? ???/// <summary>
? ?? ???///取得二級(jí)域主機(jī)頭值,存入Session["UserDomainName"]中
? ?? ???/// </summary>
? ?? ???public void UserDomainNameSession()
? ?? ???{
? ?? ?? ?? ?HostName = HttpContext.Current.Request.Url.Host.ToString();? ? ? ? //獲取URL主機(jī)地址
? ?? ?? ?? ?UserHost = HostName.Split(new Char[] { '.' });? ? ? ? //數(shù)組,以“.”分隔
? ? ? ? ? ? ? ? ? ? ? ? //判斷二級(jí)域名地址是否符合abc.域名.com 這種格式,及數(shù)組UserHost長(zhǎng)度不大于3,否則就跳傳到其它頁
? ?? ?? ?? ?if (UserHost.Length > 3)
? ?? ?? ?? ?{
? ?? ?? ?? ?? ? HttpContext.Current.Response.Redirect("http://www.域名.com//Error.aspx");? ? ? ? //跳轉(zhuǎn)到出錯(cuò)頁面
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ?? ?? ?? ?}
? ?? ?? ?? ?UserDomainName = UserHost[0].ToString();? ? ? ? //取得數(shù)組最前面一組值,及二級(jí)域名主機(jī)頭
? ? ? ? ? ? ? ? ? ? ? ? //進(jìn)行特定判斷,及是不要用到做為二級(jí)域名的主機(jī)頭
? ?? ?? ?? ?if (UserDomainName.ToLower() == "www" || UserDomainName.ToLower() == "域名" || UserDomainName == null || UserDomainName.ToString()=="")
? ?? ?? ?? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //你的動(dòng)作
? ?? ?? ?? ?}
? ?? ?? ?? ?else
? ?? ?? ?? ?{
? ?? ?? ?? ?? ? HttpContext.Current.Session["UserDomainName"] = UserDomainName; //將二級(jí)域名主機(jī)頭存入Session
? ?? ?? ?? ?}
? ?? ???}
? ? ? ? //你對(duì)Session["UserDomainName"]的處理,比如把這個(gè)Session["UserDomainName"]的值是“abc”,那么你可以index.aspx?UserName=abc,如果不想使用Session,你可以在需要用到二級(jí)域主機(jī)頭時(shí),再來通過URL地址獲取。
c.? ? ? ? URL重寫
我用的是微軟的URLRewriter,使用方法參見:[url]http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true[/url]
web.config 中的重寫方法是:
? ? ? ? ? ? ? ? ? ? ? ? <!--User區(qū)主機(jī)頭URL重寫,實(shí)現(xiàn)當(dāng)abc.域名.com訪問站點(diǎn)時(shí),經(jīng)二級(jí)域站點(diǎn),默認(rèn)首文件為Index.aspx,將Index.aspx地址重寫到/User/Index.aspx-->
? ? ? ? ? ? ? ? ? ? ? ? <RewriterRule>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <LookFor>~/Index\.aspx</LookFor>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <SendTo>~/User/Index.aspx</SendTo>
? ? ? ? ? ? ? ? ? ? ? ? </RewriterRule>
到這里已經(jīng)實(shí)現(xiàn)二級(jí)域了,不管輸入什么樣的主機(jī)頭(www.域名.com 與 域名.com除外,因?yàn)檫@兩個(gè)域已經(jīng)綁定到主站點(diǎn)中,優(yōu)先訪問到了主站點(diǎn)),就可以實(shí)現(xiàn) abc.域名.com訪問到這個(gè)用戶目錄了,而且瀏覽器地址欄,出現(xiàn)的也是abc.域名.com這樣的域名地址,為了保證此二級(jí)域訪問其它頁面也保持二級(jí)域名的屬性,也需同時(shí)做URL重寫,在其它頁面如需用到二級(jí)域主機(jī)頭(用戶名),從Session["UserDomainName"] 中取得即可,比如,要在User目錄中的文件 test.aspx ,顯示二級(jí)域主機(jī)頭名稱,同時(shí)需保持瀏覽器地址欄地址為: abc.域名.com/test.aspx ,那么在web.config中添加URL重寫規(guī)則:
? ? ? ? ? ? ? ? ? ? ? ? <RewriterRule>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <LookFor>~/test\.aspx</LookFor>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <SendTo>~/User/test.aspx</SendTo>
? ? ? ? ? ? ? ? ? ? ? ? </RewriterRule>
然后,test.aspx自身通過獲取Session["UserDomainName"]的值或通過URL或取,來顯示二級(jí)域主機(jī)頭名稱。
當(dāng)然,你也可以直接將二級(jí)域站點(diǎn)單獨(dú)綁定到這個(gè)User用戶目錄,取得URL中的主機(jī)頭(用戶名),但這樣可能失去了與主站數(shù)據(jù)通訊的方便性。
總結(jié)
以上是生活随笔為你收集整理的用asp.net 2.0实现网站二级域名(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭载2K折叠大屏:一加折叠屏新机或将定档
- 下一篇: ASP.NET 2.0:如何让DropD