UrlRewrite 实现 二级域名 重写(完整解决方案)ASP.NET
2009-02-28 09:51
465 查看
微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,如:可将 http://www.sunyet.com/showuser.aspx?us=bbs 重写为 http://www.worldbao.com/suyiming.aspx 但不能将 http://www.worldbao.com/show.aspx?us=bbs 重写为 http://bbs.worldbao.com/
要实现这个功能,首先要做域名泛解析,去域名管理里面的域名解析中添加一个:*.worldbao.com 指向服务器ip。
第二,重写URLRewrite里面的两个方法。
1.BaseModuleRewriter.cs 里面的BaseModuleRewriter_AuthorizeRequest方法
将
改为
2, ModuleRewriter.cs 里面的 Rewrite 方法
将
改为
就是将
string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";
改成了
string lookFor = "^" + rules[i].LookFor + "$";
完成这过程之后将整个项目重新编译一下。
这些都做完之后,
在webconfig配置里面的
<configSections>里面 添加:
在</configSections>下面添加
在httpModules里面添加
最后一步
IIS里面添加 ASPNET_ISAPI的通配符应用程序映射
操作方法:IIS站点属性 ->主目录 -> 配置
点击插入按键
选择或输入C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/aspnet_isapi.dll
取消"确认文件是否存在"前的钩. 确定
ok,现在输入http://suyiming.worldbao.com/就可以看到效果了
例子稍后放到csdn下载服务器,请大家关注我的博客。
要实现这个功能,首先要做域名泛解析,去域名管理里面的域名解析中添加一个:*.worldbao.com 指向服务器ip。
第二,重写URLRewrite里面的两个方法。
1.BaseModuleRewriter.cs 里面的BaseModuleRewriter_AuthorizeRequest方法
将
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication) sender; Rewrite(app.Request.Path, app); }
改为
protected virtual void BaseModuleRewriter_AuthorizeRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication) sender; Rewrite(app.Request.Url.AbsoluteUri, app); }
2, ModuleRewriter.cs 里面的 Rewrite 方法
将
protected override void Rewrite(string requestedPath, System.Web.HttpApplication app) { // log information to the Trace object. app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter"); // get the configuration rules RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules; // iterate through each rule... for(int i = 0; i < rules.Count; i++) { // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory) string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$"; // Create a regex (note that IgnoreCase is set...) Regex re = new Regex(lookFor, RegexOptions.IgnoreCase); // See if a match is found if (re.IsMatch(requestedPath)) { // match found - do any replacement needed string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo)); // log rewriting information to the Trace object app.Context.Trace.Write("ModuleRewriter", "Rewriting URL to " + sendToUrl); // Rewrite the URL RewriterUtils.RewriteUrl(app.Context, sendToUrl); break; // exit the for loop } } // Log information to the Trace object app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter"); } }
改为
protected override void Rewrite(string requestedPath, System.Web.HttpApplication app) { // log information to the Trace object. app.Context.Trace.Write("ModuleRewriter", "Entering ModuleRewriter"); // get the configuration rules RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules; // iterate through each rule... for(int i = 0; i < rules.Count; i++) { // get the pattern to look for, and Resolve the Url (convert ~ into the appropriate directory) string lookFor = "^" + rules[i].LookFor + "$"; // Create a regex (note that IgnoreCase is set...) Regex re = new Regex(lookFor, RegexOptions.IgnoreCase); // See if a match is found if (re.IsMatch(requestedPath)) { // match found - do any replacement needed string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rules[i].SendTo)); // log rewriting information to the Trace object app.Context.Trace.Write("ModuleRewriter", "Rewriting URL to " + sendToUrl); // Rewrite the URL RewriterUtils.RewriteUrl(app.Context, sendToUrl); break; // exit the for loop } } // Log information to the Trace object app.Context.Trace.Write("ModuleRewriter", "Exiting ModuleRewriter"); } }
就是将
string lookFor = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor) + "$";
改成了
string lookFor = "^" + rules[i].LookFor + "$";
完成这过程之后将整个项目重新编译一下。
这些都做完之后,
在webconfig配置里面的
<configSections>里面 添加:
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
在</configSections>下面添加
<RewriterConfig> <!-- 处理默认首页失败--> <Rules> <RewriterRule> <LookFor>http://www/.worldbao/.com/</LookFor> <SendTo>~/default.aspx</SendTo> </RewriterRule> </Rules> <!-- 处理默认首页失败--> <!--二级域名正则--> <Rules> <RewriterRule> <LookFor>http://([a-zA-Z|0-9]+)/.worldbao/.com/</LookFor> <SendTo>/user/user.aspx?us=$1</SendTo> </RewriterRule> </Rules> <!--二级域名正则--> </RewriterConfig>
在httpModules里面添加
<httpModules> <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/> </httpModules>
最后一步
IIS里面添加 ASPNET_ISAPI的通配符应用程序映射
操作方法:IIS站点属性 ->主目录 -> 配置
点击插入按键
选择或输入C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/aspnet_isapi.dll
取消"确认文件是否存在"前的钩. 确定
ok,现在输入http://suyiming.worldbao.com/就可以看到效果了
例子稍后放到csdn下载服务器,请大家关注我的博客。
相关文章推荐
- 用UrlRewrite实现ASP.NET二级或多级域名(完整解决方案)
- UrlRewrite 实现 二级域名 重写(完整解决方案)
- ASP.NET UrlRewrite 实现 二级域名 重写
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题
- asp.net用url重写URLReWriter实现任意二级域名
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- asp.net用url重写URLReWriter实现任意二级域名 高级篇
- asp.net用url重写URLReWriter实现任意二级域名 (转)
- asp.net用url重写URLReWriter实现任意二级域名
- ASP.NET中实现二级或多级域名(修改UrlRewrite)
- asp.net用url重写URLReWriter实现任意二级域名 - 牵手 |阿森纳青年军向前进,我也要加油! - 博客园
- asp.net用url重写URLReWriter实现任意二级域名 新
- ASP.NET中实现二级或多级域名(修改UrlRewrite) (转)