asp.net下用url重寫URLReWriter實現(xiàn)任意二級域名的方法第2/2頁
更新時間:2007年03月16日 00:00:00 作者:
在實施過程中會碰到一些問題,大多是因為看上面的文章不仔細產(chǎn)生的,但是說實話,那么長的文章要看完也不容易.下面我來記錄一些重要的問題.其中最后的兩個問題,用具體的代碼展示了如何處理重寫的目標url以達到我們的要求
微軟的URLRewriter是什么?這個項目在哪里下載的?
這個是在msdn上一篇介紹URLRewriter的文章中提供的示例程序,可以在這里下載到
http://www.microsoft.com/china/m ... t/URLRewriting.mspx
怎么使用這些代碼?麻煩嗎?
肯定的說,不麻煩,要做的事情有:
下載代碼到你的機器上.
安裝后,把URLRewriter這個項目添加到你自己的工程中
按照上面給的地址里的方法,修改代碼
配置web.config,開始使用.
什么是httpmodule?
簡單理解,就是一塊處理http請求的程序
更詳細的理解,請查閱sdk文檔.
怎么樣實現(xiàn)泛解析?
首先,在域名服務商那里添加一個*.kerry.com的二級域名,指向你的服務器ip
然后,在IIS里建立一個站點,這個站點的主機頭留空,一般端口是80. 這個站點就是整個服務器端口80的默認網(wǎng)站.
給這個站點添加一個通配符應用程序映射(IIS站點屬性 ->主目錄 -> 配置),這個映射的目的是要asp.net ISAPI接管任何沒有在IIS里明確的二級域名站點.
隨便輸入二級域名的時候,發(fā)生了什么?
當IIS檢測到傳入的url是一個二級域名的時候,它會先檢查IIS上有沒有注冊了這個二級域名的站點,如果有,就轉(zhuǎn)入到這個站點,否則,就會轉(zhuǎn)到默認站點,這個默認站點就是之前配置的主機頭為空的那個站點.所以,一個端口只能有一個主機頭為空的站點.
我們已經(jīng)設定由asp.net ISAPI接管這些沒有家的孩子.寫程序,分析傳入的url,執(zhí)行重寫.
為什么我的httpmodule好像沒有起作用?
在httpmodule程序里設置斷點后,無論怎么樣,流程都沒有從這里走.原因在于,你沒有向web程序注冊你的httpmodule程序.這個工作需要在web.config中完成.
<system.web>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
</system.web>
為什么總是提示我”未知的配置節(jié)RewriterConfig錯誤”
這是因為你沒有向web程序注冊你的RewriterConfig配置節(jié). 這個工作需要在web.config中完成.
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
然后,你可以在<configuration>里使用RewriterConfig節(jié)配置規(guī)則了.
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中配置的要轉(zhuǎn)到的目標url
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
在內(nèi)部把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];
//根據(jù)需要設定要重寫的目標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ī)則的時候,需要這樣
<RewriterRule>
<LookFor>http://(\w+)\.kerry\.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(\w+)用來匹配任意字符串
這里的test.aspx隨便寫別的也可以,因為我們根本沒有用它.
我有好多不確定二級域名的站點,但是每個站點的頁面確定,每個二級域名站點的內(nèi)容實際上根劇不同的id從數(shù)據(jù)庫調(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ù),都改成二級域名的方式. 這個時候該怎么辦?
首先配置規(guī)則
<RewriterRule>
<LookFor>http://(\w+)\.kerry \.com\ walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
然后在程序里這樣處理
//獲取二級域名
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
根據(jù)域名獲得不同的編號
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
大家可以看到,其基本的方法都是一樣的.之所以沒有把這個列在最前面,是因為這個做法有些取巧,可能一開始不是那么好理解.但是我相信看到最后的朋友再看這篇文章,應該都會會心的一笑
Happy programming
最后ps:本來準備過幾天發(fā)這個文章,就在剛才,不小心從VSS把這幾天寫的程序都刪除了,還是徹底型的,再次強烈的鄙視微軟做的這個垃圾源碼管理器 -_-
您可能感興趣的文章:
- Nginx服務器下使用rewrite重寫url以實現(xiàn)偽靜態(tài)的示例
- AspNetPager分頁控件UrlRewritePattern參數(shù)設置的重寫代碼
- iis7配置zend framework的地址重寫規(guī)則[url_rewrite]
- asp.net用url重寫URLReWriter實現(xiàn)任意二級域名 新
- asp.net用url重寫URLReWriter實現(xiàn)任意二級域名
- url重寫IIRF(Ionic''s Isapi Rewrite Filter)手冊
- 用ISAPI_Rewrite讓IIS也支持如Apache下.htaccess的URL重寫
- IIS下配置頁面重寫(配合插件url-rewrite2去除頁面后綴名)的實現(xiàn)方法
相關文章
asp.net 實現(xiàn)自定義Hashtable (.net)
asp.net Hashtable自定義實現(xiàn)代碼,比較多,大家可以看下,測試。2009-06-06VS2019下opencv4.1.2配置圖文教程(永久配置)
這篇文章主要介紹了VS2019下opencv4.1.2配置圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11.Net使用分表分庫框架ShardingCore實現(xiàn)多字段分片
本文詳細講解了.Net使用分表分庫框架ShardingCore實現(xiàn)多字段分片的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12