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
相关文章读者评论发表评论 |