亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net用url重寫URLReWriter實現任意二級域名第1/2頁

2024-07-10 13:21:23
字體:
來源:轉載
供稿:網友
好久沒有寫技術文章,如果大家看不明白,就多看幾篇,汗,或者,在文章的后面回復(這是最有效的辦法),我會盡力幫助大家解答疑惑.

來找這篇文章的,應該都知道什么叫二級域名吧,廢話就不說了.但是討論前,先要明白一個思想問題.
很多朋友一直考慮不清(我前幾天也一直搞不明白)的問題是,我鍵入一個地址后,怎么這個url就被重寫了?
第一步:在瀏覽器鍵入了一個地址,比如,點回車后,都發生了什么?
為了把問題簡單化,我來這樣解釋:
第二步:首先,鍵入的地址被解析,最終來到了一臺web服務器.交給IIS處理.在.net的世界中,IIS會把這樣的請求再交給一個web處理器 處理,最后,該 web處理器 把處理的結果返回給瀏覽器,顯示給用戶看.
請不用忽略這樣一個問題,第二步的所有事情都是在服務器端做的.在這些事情進行的時候,用戶端的瀏覽器上面的地址不會改變.即使最后 web處理器 把處理結果返回來的時候,上面的地址也不會改變.
一開始鍵入的url,只是起一個敲門的作用,門敲完了,作用就算結束了,只有你的眼睛可以看到那個地址,瀏覽器,服務器等都不知道這個地址.
然后要明白的問題是,所謂url重寫,也只是web開發人員知道的內幕情況,用戶根本不知道發生了什么,他認為自己鍵入的地址就是應該出來屏幕上顯示的結果.也就是說,我們在幕后控制要顯示的內容.
接下來要考慮的是,怎么樣控制顯示的內容?
從上面說的過程,很明顯要在 web處理器 的工作這一步動手腳.

一個最簡單的考慮是,用戶敲入了一個簡單的不帶任何參數地址, 然后我們把這個地址改成一個符合程序需要的帶參數的地址, ?lover=notus,最后處理之.
所謂的url重寫,就是在這一步.
用.net的術語來說,我們需要給應用程序注冊一個httpmodule,用來處理特定的url
注冊httpmodule,在web.config,
處理url,在我們提供的httpmodule程序中

大體相當于這樣的一段程序

//用我們的httpmodule程序截獲原始url
String OriginalUrl=” ”;
//處理原始url,得到最后需要的url,值為?lover=notus
String FinalUrl=Rewrite(OriginalUrl);
// context重新將url在內部發送給IIS處理
context.RewritePath(FinalUrl);

接下來,我們來實現url重寫.
第一步:確定要對哪些url執行重寫,即制定重寫規則
第二步:編寫httpmodule處理程序
第三步:將編寫的httpmodule整合入web程序,開始工作.

上面就是url重寫的基本知識,而用url重寫實現二級域名,過程一樣.因為無論是二級域名還是三級域名,都是一個url地址.只要我們截獲這個url地址,就可以在處理的時候動手腳.

這些工作挺麻煩,但是網絡上已經有高人給我們寫了這樣的程序,參看下面的文章:







文章結束了.

在實施過程中會碰到一些問題,大多是因為看上面的文章不仔細產生的,但是說實話,那么長的文章要看完也不容易.下面我來記錄一些重要的問題.其中最后的兩個問題,用具體的代碼展示了如何處理重寫的目標url以達到我們的要求


為什么非要用泛解析?
看了好多朋友的回復,我想現在可能有這樣的誤解,即,這篇關于url重寫的文章只是給大家介紹一些處理方法.至于泛解析不泛解析,并不重要.
如果你不需要實現任意二級域名,那就用不著去實現泛解析,直接把你需要的二級域名定死,然后在url重寫里處理好了!
再退一步,如果連二級域名都不用實現,僅僅是對一個固定域名下的url進行重寫,那都不需要修改msdn的那個urlrewriter,直接拿來用就可以實現了簡單的url重寫. zyw對這個項目進行的修改,只是為了取到全部的url進行更大限度的控制.而如我們所見,一開始msdn的那個urlrewriter并不關心域名的問題
我一開始給文章起這樣的題目,是因為最近我項目里用到了,寫文檔的時候順便就把這個文章寫了



微軟的URLRewriter是什么?這個項目在哪里下載的?
這個是在msdn上一篇介紹URLRewriter的文章中提供的示例程序,可以在這里下載到



怎么使用這些代碼?麻煩嗎?
肯定的說,不麻煩,要做的事情有:
下載代碼到你的機器上.
安裝后,把URLRewriter這個項目添加到你自己的工程中
按照上面給的地址里的方法,修改代碼
配置web.config,開始使用.


什么是httpmodule?

簡單理解,就是一塊處理http請求的程序
更詳細的理解,請查閱sdk文檔.


怎么樣實現泛解析?

首先,在域名服務商那里添加一個*.kerry.com的二級域名,指向你的服務器ip
然后,在IIS里建立一個站點,這個站點的主機頭留空,一般端口是80. 這個站點就是整個服務器端口80的默認網站.
給這個站點添加一個通配符應用程序映射(IIS站點屬性 ->主目錄 -> 配置),這個映射的目的是要asp.net ISAPI接管任何沒有在IIS里明確的二級域名站點.


隨便輸入二級域名的時候,發生了什么?
當IIS檢測到傳入的url是一個二級域名的時候,它會先檢查IIS上有沒有注冊了這個二級域名的站點,如果有,就轉入到這個站點,否則,就會轉到默認站點,這個默認站點就是之前配置的主機頭為空的那個站點.所以,一個端口只能有一個主機頭為空的站點.
我們已經設定由asp.net ISAPI接管這些沒有家的孩子.寫程序,分析傳入的url,執行重寫.

為什么我的httpmodule好像沒有起作用?

在httpmodule程序里設置斷點后,無論怎么樣,流程都沒有從這里走.原因在于,你沒有向web程序注冊你的httpmodule程序.這個工作需要在web.config中完成.
<system.web>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" />
</httpModules>
</system.web>


為什么總是提示我”未知的配置節RewriterConfig錯誤”

這是因為你沒有向web程序注冊你的RewriterConfig配置節. 這個工作需要在web.config中完成.
<configSections>
<section type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
然后,你可以在<configuration>里使用RewriterConfig節配置規則了.


url是在httpmodule的哪個部分處理的?

大多的工作是在URLRewriter. ModuleRewriter. Rewrite()方法里.關鍵階段是這里:
if (re.IsMatch(requestedPath))
很明顯,這個判斷傳入的url是否是我們要重寫的url,大家接著看,
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
這里接受到web.config中配置的要轉到的目標url
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
在內部把url重寫.


我不想把二級域名寫死在web.config中,而且我要重寫的目標url也不能寫死.比如我們有這樣的需要
Love.kerry.com實際的處理頁面是kerry.com/action.aspx?id=1
call.kerryl.com實際的處理頁面是kerry.com/action.aspx?id=2
walkwith.kerry.com實際的處理頁面是kerry.com/walk.aspx
要怎么處理?


這個時候,就需要在上面說的那幾個代碼里做手腳.
if (re.IsMatch(requestedPath))
{

//找到url里的二級域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];

//根據需要設定要重寫的目標url
string sendToUrl ;
if(domain2==” Love”)
sendToUrl =” /action.aspx?id=1”;
else if(domain2==” call”)
sendToUrl =” /action.aspx?id=2”;
else i f(domain2==” walkwith”)
sendToUrl =” /walk.aspx”;

RewriterUtils.RewriteUrl(app.Context, sendToUrl);

}

在web.config里配置規則的時候,需要這樣
<RewriterRule>
<LookFor>(/w+)/.kerry/.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(/w+)用來匹配任意字符串
這里的test.aspx隨便寫別的也可以,因為我們根本沒有用它.


我有好多不確定二級域名的站點,但是每個站點的頁面確定,每個二級域名站點的內容實際上根劇不同的id從數據庫調,
情況如這樣
?id=1 love.kerry.com/walk.aspx

?id=14 like.kerry.com/walk.aspx

現在傳上去,不能顯示id參數,都改成二級域名的方式. 這個時候該怎么辦?

首先配置規則
<RewriterRule>
<LookFor>(/w+)/.kerry /.com/ walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
然后在程序里這樣處理
//獲取二級域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
根據域名獲得不同的編號
int id=getIDfromDomain(domain2);
//獲得要轉向的基本url
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
//加上id參數
if(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
else
sendToUrl=”error.aspx”;
//重寫
RewriterUtils.RewriteUrl(app.Context, sendToUrl);


如何匹配目錄?寫了一個lookfor規則 ,但是在瀏覽器輸入這個地址, 總是不能正確的重寫,經過trace后發現根本不能匹配,為什么?

首先,我們應該知道,瀏覽器實際上接受的不是,而是 ,因此,你的</LookFor>規則應該這樣寫
<LookFor>

</LookFor>
這個default.aspx應該是你在iis里配置的默認文檔,如果你的是index.aspx或其他奇怪的名字,就寫成你自己的名字
同樣, 這個地址要匹配,需要這樣的規則
但是,再羅嗦一句,你的文件根本不需要有fun這個目錄,因為...重寫了嘛


我搜到網上還有另外一種解決辦法…

或許你是指這篇文章



大家可以看到,其基本的方法都是一樣的.之所以沒有把這個列在最前面,是因為這個做法有些取巧,可能一開始不是那么好理解.但是我相信看到最后的朋友再看這篇文章,應該都會會心的一笑
Happy programming
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品专区一| 国产精品444| 久久久精品999| 高清欧美电影在线| 国产乱肥老妇国产一区二| 日韩欧美成人免费视频| 国产成人在线一区| 在线国产精品播放| 国产91精品久久久久| 日本国产高清不卡| 97精品国产97久久久久久| 中文字幕欧美日韩精品| 国产午夜精品全部视频播放| 欧美成人免费播放| 色偷偷综合社区| 97视频在线观看免费高清完整版在线观看| 亚洲成在人线av| 色www亚洲国产张柏芝| 国产成人精品电影久久久| 日韩视频免费看| 欧美性极品少妇精品网站| 亚洲精品一区在线观看香蕉| 日韩成人久久久| 国产精品久久婷婷六月丁香| 成人激情春色网| 欧美日本中文字幕| 国产脚交av在线一区二区| 狠狠躁夜夜躁久久躁别揉| 国产精品久久一区主播| 国内外成人免费激情在线视频网站| 久久97精品久久久久久久不卡| 国产日韩欧美夫妻视频在线观看| 国产欧美精品在线播放| 亚洲精品一区中文字幕乱码| 精品国产一区二区三区在线观看| 国产精品久久久久久av下载红粉| 国产精品免费视频xxxx| 国产精品成人国产乱一区| 青草青草久热精品视频在线观看| 久久精品视频导航| 日韩av在线精品| 亚洲国产私拍精品国模在线观看| 欧美一区二区三区免费观看| 国产精品吹潮在线观看| www.xxxx精品| 91系列在线播放| 一级做a爰片久久毛片美女图片| 中文字幕免费精品一区| 日韩av大片免费看| 国模吧一区二区| 日韩激情在线视频| 91地址最新发布| 青青久久av北条麻妃海外网| 蜜月aⅴ免费一区二区三区| 国产精品一区久久久| 国产精品成人一区| 亚洲3p在线观看| 欧美午夜片在线免费观看| 在线观看视频99| 久久综合网hezyo| 91国产一区在线| 欧美日韩亚洲一区二区三区| 91久热免费在线视频| xxav国产精品美女主播| 成人免费高清完整版在线观看| 久久99视频免费| 精品国产自在精品国产浪潮| 久久成人免费视频| www.亚洲成人| 欧美成人午夜激情视频| 欧美亚洲在线观看| 亚洲精品免费一区二区三区| 亚洲天堂av网| 欧美性猛交xxxx| 欧美日韩一区二区在线| 欧美影院在线播放| 欧美成人精品三级在线观看| 91丝袜美腿美女视频网站| 欧美成人精品影院| 亚洲欧洲xxxx| 国产亚洲视频中文字幕视频| 亚洲午夜未满十八勿入免费观看全集| 在线观看日韩专区| 日韩国产激情在线| 国产精品免费电影| 亚洲色图av在线| 亚洲精品99久久久久| 成人妇女淫片aaaa视频| 91在线网站视频| 中文字幕欧美亚洲| 大量国产精品视频| 欧美又大又硬又粗bbbbb| 国产精品99导航| 北条麻妃99精品青青久久| 国产精品av在线| 日韩福利在线播放| 欧美老女人性视频| 97在线视频免费观看| 国产精品一久久香蕉国产线看观看| 国产在线98福利播放视频| 欧美成人一区二区三区电影| 不卡在线观看电视剧完整版| 日本aⅴ大伊香蕉精品视频| 68精品久久久久久欧美| 日韩成人性视频| 亚洲自拍欧美另类| 中文字幕日韩欧美在线视频| 97视频免费在线看| 性亚洲最疯狂xxxx高清| 亚洲美女av在线播放| 国产亚洲免费的视频看| 久久精品91久久香蕉加勒比| 九九久久久久久久久激情| 欧美人在线观看| 亚洲一区中文字幕在线观看| 国产精品69久久久久| 欧美午夜无遮挡| 亚洲精品女av网站| 欧美精品video| 亚洲色图在线观看| 欧美精品情趣视频| 欧美情侣性视频| 亚洲欧美资源在线| 精品日本高清在线播放| 国产亚洲精品91在线| 国产精品草莓在线免费观看| 在线观看久久av| 38少妇精品导航| 国产亚洲欧美视频| 视频在线观看99| 成人黄色激情网| 欧美亚洲国产视频小说| 91高清视频在线免费观看| 国产精品视频永久免费播放| 日韩成人在线视频观看| 一区二区三区国产在线观看| 国产日韩中文字幕在线| 亚洲欧美日韩国产成人| 日韩av片电影专区| 欧美成人一二三| 亚洲天堂av在线播放| 国产亚洲视频中文字幕视频| 欧美久久久精品| 日韩男女性生活视频| 国产精品爽爽爽爽爽爽在线观看| 国产精品久久77777| 亚洲欧洲中文天堂| 韩国三级日本三级少妇99| 欧美黑人极品猛少妇色xxxxx| 正在播放欧美一区| 欧美在线一区二区视频| 久久精品久久精品亚洲人| 国产日韩欧美电影在线观看| 欧美在线观看日本一区| 国产精品十八以下禁看| 久久久亚洲影院| 欧美人在线观看| 久久久女人电视剧免费播放下载| 亚洲一区二区三区视频| yellow中文字幕久久| 97超级碰碰碰| 国产精品主播视频| 久久久av网站| 久久精品国产欧美激情|