我们已经设定由asp.net ISAPI接管这些没有家的孩子.写程序,分析传入的url,执行重写.
为什么我的httpmodule好像没有起作用?
在httpmodule程序里设置断点后,无论怎么样,流程都没有从这里走.原因在于,你没有向web程序注册你的httpmodule程序.这个工作需要在web.config中完成.
<system.web>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
</system.web>
为什么总是提示我”未知的配置节RewriterConfig错误”
这是因为你没有向web程序注册你的RewriterConfig配置节. 这个工作需要在web.config中完成.
<configSections>
<section name="RewriterConfig" 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>http://(w+).kerry.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(w+)用来匹配任意字符串
这里的test.aspx随便写别的也可以,因为我们根本没有用它.
我有好多不确定二级域名的站点,但是每个站点的页面确定,每个二级域名站点的内容实际上根剧不同的id从数据库调,
情况如这样
http://localhost/kerry/action.aspx?id=1 love.kerry.com/walk.aspx








