专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » url重写: C#.NET实现二级或多级域名URL重写 »正文

url重写: C#.NET实现二级或多级域名URL重写

来源: 发布时间:星期四, 2009年2月12日 浏览:254次 评论:0


要实现这个功能前提条件就是www.abc.com是泛解析再就是要修改下URLRewriter了
总共要修改2个文件

1.BaseModuleRewriter.cs

protectedvirtualvoidBaseModuleRewriter_AuthorizeRequest(objectsender,EventArgse)
{
HttpApplicationapp=(HttpApplication)sender;
Rewrite(app.Request.Path,app);
}
改为

protectedvirtualvoidBaseModuleRewriter_AuthorizeRequest(objectsender,EventArgse)
{
HttpApplicationapp=(HttpApplication)sender;
Rewrite(app.Request.Url.AbsoluteUri,app);
}

就是将app.Request.Path替换成了app.Request.Url.AbsoluteUri

2.ModuleRewriter.cs

for(i=0;i<rules.Count;i)
{
//getthepatterntolookfor,andResolvetheUrl(convert~otheappropriatedirectory)
lookFor=\"^\"+RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath,rules[i].LookFor)+\"$\";

//Createaregex(notethatIgnoreCaseis)
Regexre=Regex(lookFor,RegexOptions.IgnoreCase);

//Seeamatchisfound
(re.IsMatch(requestedPath)) [Page]
{
//matchfound-doanyreplacementneeded
sendToUrl=RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath,re.Replace(requestedPath,rules[i].SendTo));

//logrewritinginformationtotheTraceobject
app.Context.Trace.Write(\"ModuleRewriter\",\"RewritingURLto\"+sendToUrl);

//RewritetheURL
RewriterUtils.RewriteUrl(app.Context,sendToUrl);
;//exittheforloop
}
}
改为

for(i=0;i<rules.Count;i)
{
//getthepatterntolookfor,andResolvetheUrl(convert~otheappropriatedirectory)


lookFor=\"^\"+rules[i].LookFor+\"$\";

//Createaregex(notethatIgnoreCaseis) [Page]
Regexre=Regex(lookFor,RegexOptions.IgnoreCase);

//Seeamatchisfound
(re.IsMatch(requestedPath))
{
//matchfound-doanyreplacementneeded
sendToUrl=RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath,re.Replace(requestedPath,rules[i].SendTo));

//logrewritinginformationtotheTraceobject
app.Context.Trace.Write(\"ModuleRewriter\",\"RewritingURLto\"+sendToUrl);

//RewritetheURL
RewriterUtils.RewriteUrl(app.Context,sendToUrl);
;//exittheforloop
}
}


lookFor=\"^\"+RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath,rules[i].LookFor)+\"$\";

改成了

lookFor=\"^\"+rules[i].LookFor+\"$\"; [Page]


完成这2处改动的后重新编译项目将生成dll复制到bin目录下

再就是写web.config里重写正则了

<RewriterRule>
<LookFor>http://(\\d+)\\.abc\\.com</LookFor>
<SendTo>/show.aspx?id=$1</SendTo>
</RewriterRule>


好了大功告成你在IE地址栏输入http://1234.abc.com就可以看到http://www.abc.com/show.aspx?id=1234

结果了
问题:
1.域名解析问题
输入了域名http://1234.abc.com,浏览器提示找不到网页首先你应该确认你域名是否支持泛域名解析就是让所有 2级 3级域名都指向你server其次要保证你站点是服务器上默认站点就是80端口主机头为空站点即可以直接用IP可以访问http://1234.abc.com要么要提示你站点信息要么会正确执行你定义URLRewrite,要么显示你站点首页

2.不能执行重写问题
如果你确认你域名解析是正确但是还是不能重写访问http://1234.abc.com会提示路径\"/\"找不到...,
如果是这样你先添加ASPNET_ISAPI通配符应用映射(这步是必需,Sorry!没有在上篇文章中提出来)

操作思路方法:IIS站点属性->主目录->配置




点击插入按键



选择或输入C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\aspnet_isapi.dll
取消\"确认文件是否存在\"前钩.
确定

在来访问http://1234.abc.com应该是没有问题了


3.默认首页失效把请球直接交给asp.net处理IIS定义默认首页将会失效出现这种情形:
访问http://www.abc.com不能访问首页而通过http://1234.abc.com/default.aspx可以访问
为解决这个问题请自己在Web.Config中设置lookfor/to/default.aspx或index.aspx..重写完全可以解决问题
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: