asp.net用url重寫URLReWriter實(shí)現(xiàn)任意二級(jí)域名
為什么我的httpmodule好像沒有起作用?
在httpmodule程序里設(shè)置斷點(diǎn)后,無論怎么樣,流程都沒有從這里走.原因在于,你沒有向web程序注冊(cè)你的httpmodule程序.這個(gè)工作需要在web.config中完成.
<system.web>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
</system.web>
為什么總是提示我”未知的配置節(jié)RewriterConfig錯(cuò)誤”
這是因?yàn)槟銢]有向web程序注冊(cè)你的RewriterConfig配置節(jié). 這個(gè)工作需要在web.config中完成.
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
然后,你可以在<configuration>里使用RewriterConfig節(jié)配置規(guī)則了.
url是在httpmodule的哪個(gè)部分處理的?
大多的工作是在URLRewriter. ModuleRewriter. Rewrite()方法里.關(guān)鍵階段是這里:
if (re.IsMatch(requestedPath))
很明顯,這個(gè)判斷傳入的url是否是我們要重寫的url,大家接著看,
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
這里接受到web.config中配置的要轉(zhuǎn)到的目標(biāo)url
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
在內(nèi)部把url重寫.
我不想把二級(jí)域名寫死在web.config中,而且我要重寫的目標(biāo)url也不能寫死.比如我們有這樣的需要
Love.kerry.com實(shí)際的處理頁面是kerry.com/action.aspx?id=1
call.kerryl.com實(shí)際的處理頁面是kerry.com/action.aspx?id=2
walkwith.kerry.com實(shí)際的處理頁面是kerry.com/walk.aspx
要怎么處理?
這個(gè)時(shí)候,就需要在上面說的那幾個(gè)代碼里做手腳.
if (re.IsMatch(requestedPath))
{
//找到url里的二級(jí)域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
//根據(jù)需要設(shè)定要重寫的目標(biāo)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里配置規(guī)則的時(shí)候,需要這樣
<RewriterRule>
<LookFor>http://(\w+)\.kerry\.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(\w+)用來匹配任意字符串
這里的test.aspx隨便寫別的也可以,因?yàn)槲覀兏緵]有用它.
我有好多不確定二級(jí)域名的站點(diǎn),但是每個(gè)站點(diǎn)的頁面確定,每個(gè)二級(jí)域名站點(diǎn)的內(nèi)容實(shí)際上根劇不同的id從數(shù)據(jù)庫(kù)調(diào),
情況如這樣
http://localhost/kerry/action.aspx?id=1 love.kerry.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
現(xiàn)在傳上去,不能顯示id參數(shù),都改成二級(jí)域名的方式. 這個(gè)時(shí)候該怎么辦?
首先配置規(guī)則
<RewriterRule>
<LookFor>http://(\w+)\.kerry \.com\ walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
然后在程序里這樣處理
//獲取二級(jí)域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
根據(jù)域名獲得不同的編號(hào)
int id=getIDfromDomain(domain2);
//獲得要轉(zhuǎn)向的基本url
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo));
//加上id參數(shù)
if(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
else
sendToUrl=”error.aspx”;
//重寫
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
如何匹配目錄?寫了一個(gè)lookfor規(guī)則 http://love.kerry.com/,但是在瀏覽器輸入這個(gè)地址, 總是不能正確的重寫,經(jīng)過trace后發(fā)現(xiàn)根本不能匹配,為什么?
首先,我們應(yīng)該知道,瀏覽器實(shí)際上接受的不是http://love.kerry.com/,而是http://love.kerry.com/default.aspx ,因此,你的</LookFor>規(guī)則應(yīng)該這樣寫
<LookFor>
http://love.kerry.com/default.aspx
</LookFor>
這個(gè)default.aspx應(yīng)該是你在iis里配置的默認(rèn)文檔,如果你的是index.aspx或其他奇怪的名字,就寫成你自己的名字
同樣, http://love.kerry.com/fun 這個(gè)地址要匹配,需要這樣的規(guī)則http://love.kerry.com/fun/default.aspx
但是,再羅嗦一句,你的文件根本不需要有fun這個(gè)目錄,因?yàn)?..重寫了嘛
我搜到網(wǎng)上還有另外一種解決辦法…
或許你是指這篇文章
http://blog.csdn.net/mengyao/archive/2007/01/25/1493537.aspx
大家可以看到,其基本的方法都是一樣的.之所以沒有把這個(gè)列在最前面,是因?yàn)檫@個(gè)做法有些取巧,可能一開始不是那么好理解.但是我相信看到最后的朋友再看這篇文章,應(yīng)該都會(huì)會(huì)心的一笑
Happy programming
- Nginx服務(wù)器下使用rewrite重寫url以實(shí)現(xiàn)偽靜態(tài)的示例
- AspNetPager分頁控件UrlRewritePattern參數(shù)設(shè)置的重寫代碼
- iis7配置zend framework的地址重寫規(guī)則[url_rewrite]
- asp.net用url重寫URLReWriter實(shí)現(xiàn)任意二級(jí)域名 新
- url重寫IIRF(Ionic''s Isapi Rewrite Filter)手冊(cè)
- asp.net下用url重寫URLReWriter實(shí)現(xiàn)任意二級(jí)域名的方法
- 用ISAPI_Rewrite讓IIS也支持如Apache下.htaccess的URL重寫
- IIS下配置頁面重寫(配合插件url-rewrite2去除頁面后綴名)的實(shí)現(xiàn)方法
相關(guān)文章
asp.net+ajax+sqlserver自動(dòng)補(bǔ)全功能實(shí)現(xiàn)解析
這篇文章主要介紹了asp.net + ajax + sqlserver 自動(dòng)補(bǔ)全功能,需要的朋友可以參考下2014-03-03.net framework中引進(jìn)的var對(duì)象類型聲明
安裝了vs 2008之后,在后臺(tái)代碼中,resharper插件對(duì)后臺(tái)所有局部變量進(jìn)行提示建議,顯示需要采用use implicitly typed local variable declaration,通過代碼修改建議2010-12-12asp.net關(guān)于onpropertychange和oninput事件實(shí)現(xiàn)代碼
文本框,數(shù)據(jù)列表,當(dāng)在文本框中輸入條件時(shí)需要實(shí)時(shí)刷新數(shù)據(jù)列表,而且需要滿足多瀏覽器(IE6.0/7.0/8.0,FireFox,Opera,google chrome,Safair)其功能類似google的智能匹配,我是用asp.net實(shí)現(xiàn)的。2009-11-11C#/.NET讀取或修改文件的創(chuàng)建時(shí)間及修改時(shí)間詳解
這篇文章主要給大家介紹了關(guān)于C#/.NET讀取或修改文件的創(chuàng)建時(shí)間及修改時(shí)間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08Redis數(shù)據(jù)庫(kù)基礎(chǔ)與ASP.NET?Core緩存實(shí)現(xiàn)
這篇文章介紹了Redis數(shù)據(jù)庫(kù)基礎(chǔ)與ASP.NET?Core緩存實(shí)現(xiàn)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02ClickOnce DIY全自動(dòng)更新下載升級(jí)的自我實(shí)現(xiàn)
ClickOnce DIY全自動(dòng)更新下載升級(jí)的自我實(shí)現(xiàn)...2007-08-08一個(gè)事半功倍的c#方法 動(dòng)態(tài)注冊(cè)按鈕事件
前幾天在網(wǎng)上看見一個(gè)制作計(jì)算器的c#程序,其中有一個(gè)動(dòng)態(tài)注冊(cè)按鈕事件,覺的很有用。于是實(shí)際操作了一哈, 確實(shí)比較好。2010-04-04net操作access數(shù)據(jù)庫(kù)示例分享
這篇文章主要介紹了net操作access數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下2014-03-03