asp.net用url重写URLReWriter实现任意二级域名 高级篇

2019-05-11 19:56:20于丽

http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx

现在传上去,不能显示id参数,都改成二级域名的方式. 这个时候该怎么办?

首先配置规则
<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];
根据域名获得不同的编号
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规则 http://love.kerry.com/,但是在浏览器输入这个地址, 总是不能正确的重写,经过trace后发现根本不能匹配,为什么?

首先,我们应该知道,浏览器实际上接受的不是http://love.kerry.com/,而是http://love.kerry.com/default.aspx ,因此,你的</LookFor>规则应该这样写
<LookFor>
http://love.kerry.com/default.aspx
</LookFor>
这个default.aspx应该是你在iis里配置的默认文档,如果你的是index.aspx或其他奇怪的名字,就写成你自己的名字
同样, http://love.kerry.com/fun  这个地址要匹配,需要这样的规则http://love.kerry.com/fun/default.aspx
但是,再罗嗦一句,你的文件根本不需要有fun这个目录,因为...重写了嘛


我搜到网上还有另外一种解决办法…

或许你是指这篇文章

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

大家可以看到,其基本的方法都是一样的.之所以没有把这个列在最前面,是因为这个做法有些取巧,可能一开始不是那么好理解.但是我相信看到最后的朋友再看这篇文章,应该都会会心的一笑
Happy programming 


最后ps:本来准备过几天发这个文章,就在刚才,不小心从VSS把这几天写的程序都删除了,还是彻底型的,再次强烈的鄙视微软做的这个垃圾源码管理器 -_-