欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net下用url重寫URLReWriter實(shí)現(xiàn)任意二級(jí)域名的方法

 更新時(shí)間:2007年03月16日 00:00:00   作者:  

在實(shí)施過(guò)程中會(huì)碰到一些問(wèn)題,大多是因?yàn)榭瓷厦娴奈恼虏蛔屑?xì)產(chǎn)生的,但是說(shuō)實(shí)話,那么長(zhǎng)的文章要看完也不容易.下面我來(lái)記錄一些重要的問(wèn)題.其中最后的兩個(gè)問(wèn)題,用具體的代碼展示了如何處理重寫的目標(biāo)url以達(dá)到我們的要求


微軟的URLRewriter是什么?這個(gè)項(xiàng)目在哪里下載的?
這個(gè)是在msdn上一篇介紹URLRewriter的文章中提供的示例程序,可以在這里下載到
http://www.microsoft.com/china/m ... t/URLRewriting.mspx


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


什么是httpmodule?

簡(jiǎn)單理解,就是一塊處理http請(qǐng)求的程序
更詳細(xì)的理解,請(qǐng)查閱sdk文檔.


怎么樣實(shí)現(xiàn)泛解析?

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


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


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

在httpmodule程序里設(shè)置斷點(diǎn)后,無(wú)論怎么樣,流程都沒有從這里走.原因在于,你沒有向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í)際的處理頁(yè)面是kerry.com/action.aspx?id=1
call.kerryl.com實(shí)際的處理頁(yè)面是kerry.com/action.aspx?id=2
walkwith.kerry.com實(shí)際的處理頁(yè)面是kerry.com/walk.aspx
要怎么處理?



這個(gè)時(shí)候,就需要在上面說(shuō)的那幾個(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+)用來(lái)匹配任意字符串
這里的test.aspx隨便寫別的也可以,因?yàn)槲覀兏緵]有用它.


我有好多不確定二級(jí)域名的站點(diǎn),但是每個(gè)站點(diǎn)的頁(yè)面確定,每個(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);

我搜到網(wǎng)上還有另外一種解決辦法…

或許你是指這篇文章

http://blog.csdn.net/mengyao/archive/2007/01/25/1493537.aspx

大家可以看到,其基本的方法都是一樣的.之所以沒有把這個(gè)列在最前面,是因?yàn)檫@個(gè)做法有些取巧,可能一開始不是那么好理解.但是我相信看到最后的朋友再看這篇文章,應(yīng)該都會(huì)會(huì)心的一笑
Happy programming


最后ps:本來(lái)準(zhǔn)備過(guò)幾天發(fā)這個(gè)文章,就在剛才,不小心從VSS把這幾天寫的程序都刪除了,還是徹底型的,再次強(qiáng)烈的鄙視微軟做的這個(gè)垃圾源碼管理器 -_-

相關(guān)文章

最新評(píng)論