`
izuoyan
  • 浏览: 9221319 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

修改UrlRewrite以对域名进行重写,即实现二级或多级域名

阅读更多
大家应该知道,微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,如:可将 http://www.abc.com/1234/ 重写为 http://www.abc.com/show.aspx?id=1234 但不能将
http://1234.abc.com 重写为 http://www.abc.com/show.aspx?id=1234

要实现这个功能,前提条件就是 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(inti=0;i<rules.Count;i++)
{
//getthepatterntolookfor,andResolvetheUrl(convert~intotheappropriatedirectory)
stringlookFor="^"+RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath,rules[i].LookFor)+"$";

//Createaregex(notethatIgnoreCaseisset)
Regexre=newRegex(lookFor,RegexOptions.IgnoreCase);

//Seeifamatchisfound
if(re.IsMatch(requestedPath))
{
//matchfound-doanyreplacementneeded
stringsendToUrl=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);
break;//exittheforloop
}

}

改为

for(inti=0;i<rules.Count;i++)
{
//getthepatterntolookfor,andResolvetheUrl(convert~intotheappropriatedirectory)
stringlookFor="^"+rules[i].LookFor+"$";

//Createaregex(notethatIgnoreCaseisset)
Regexre=newRegex(lookFor,RegexOptions.IgnoreCase);

//Seeifamatchisfound
if(re.IsMatch(requestedPath))
{
//matchfound-doanyreplacementneeded
stringsendToUrl=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);
break;//exittheforloop
}

}



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

改成了

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


完成这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

的结果了

若你在实际应用中碰到了问题,请查看文章 "修改UrlRewrite以对域名进行重写"需要注意的问题,希望能够帮助你!


附:

URLRewriter 的相关资料

http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

本文背景:

http://jzywh.cnblogs.com/archive/2005/09/29/246650.html


网上很多朋友看到我这篇文章,按照我的方法做了,但是还是没有得到想要的效果,其实有些问题需要注意一下,我上篇文章也只是提出了解决这一问题的办法的最核心的内容,有些朋友可能在实际运用中可能会碰到一些问题其实可以根据自己的经验作出相应处理应该可以解决,我在这里帮大家列出几点以帮助大家快速解决问题。


1.域名解析问题
输入了域名http://1234.abc.com,浏览器提示找不到网页。首先,你应该确认你的域名是否支持泛域名解析,就是让所有的二级,三级域名都指向你的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 ..的重写,完全可以解决问题。


OK,我列出了应该会普遍出现的问题的解决方法,如果你出现了我这里没有列出的问题而你自己又不能解决的,请在此回复提问或者给我发邮件或者加我QQ.

原文地址:
http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html
http://www.cnblogs.com/jzywh/archive/2006/02/20/seconddomainurlrewriter.html

分享到:
评论

相关推荐

    UrlRewrite实现二级域名或多级域名

    在互联网应用开发中,URL重写(UrlRewrite)是一项重要的技术,它允许我们根据特定规则改变请求的URL,从而实现诸如优化SEO、隐藏真实路径、实现二级或多级域名等功能。在本文中,我们将深入探讨如何利用UrlRewrite...

    UrlRewrite域名重写

    UrlRewrite是一个强大的URL管理工具,常用于ASP.NET应用程序中,它允许开发者通过自定义规则对网站的URL进行重写和转换。这个技术的核心在于提供更友好的、搜索引擎优化(SEO)的URL,同时也可以帮助解决网站迁移或...

    Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写[文].pdf

    Nginx 中 rewrite 实现二级域名、三级域名、泛域名...Nginx 中的 rewrite 模块可以实现二级域名、三级域名、泛域名、路径的重写,并且可以使用 rewrite flags、正则表达式匹配、全局变量等来实现复杂的 URL 重写逻辑。

    二级域名重写 二级域名重写

    根据提供的标题、描述、标签及部分内容,我们可以...通过使用ASP.NET中的模块重写机制,我们可以轻松地实现对二级域名的定制化处理,以满足不同场景的需求。希望以上内容能够帮助您更好地理解和运用二级域名重写技术。

    URLRewrite URL重写组件

    URLRewrite是一款广泛应用于ASP.NET应用程序中的URL重写工具,它允许开发者通过修改HTTP请求的URL来实现各种功能,如优化SEO(搜索引擎优化)、隐藏内部结构、提供友好的URL以及实现负载均衡等。该组件基于IIS的URL...

    ASP.NET中实现二级或多级域名

    然而,标准的URL重写技术(例如微软提供的URL Rewrite)只能对域名后的路径进行重写,无法直接重写域名本身。例如,可以将`http://www.abc.com/1234/`重写为`http://www.abc.com/show.aspx?id=1234`,但不能直接将`...

    伪静态和url重写 实现二级域名

    **四、整合应用:在IIS上实现二级域名的伪静态和URL重写** 1. 首先,在IIS服务器上配置好主站点,确保动态内容正常运行。 2. 在域名控制面板中,设置泛解析,将`*`指向主站点的IP地址。 3. 安装并配置IIS的URL ...

    IIS URL Rewrite模块(URL 重写).xmind

    IIS URL Rewrite模块(URL 重写)

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

    2. **代码实现**:可能需要对URLReWriter的源码进行修改,以适应特定的URL处理需求。 **注意事项** 1. **配置正确性**:确保Web.config中的HttpModule配置正确无误,避免导致应用无法启动。 2. **测试全面**:对...

    urlrewrite url地址重写

    标题中的“urlrewrite”指的是使用特定的工具或框架来实现这一功能,例如Apache的mod_rewrite模块或者Tuckey的UrlRewriteFilter。在本文中,我们将深入探讨URL重写的基本概念、用途和实现方式。 **1. URL重写基本...

    IIS 中使用rewrite插件进行url重写

    在IIS(Internet Information Services)中,URL重写是一项关键功能,它允许网站管理员通过配置规则来改变用户请求的URL,以实现优化网址结构、隐藏真实路径或进行SEO友好等目的。IIS URL Rewrite模块是一个强大的...

    URL重定向,动态加载二级域名

    在IT行业中,URL重定向和动态加载二级域名是两种关键的技术,它们对于构建现代Web应用程序至关重要。下面将详细解释这两个概念及其应用场景。 首先,我们来理解URL重定向(URLRewriter)。URL重定向是一种网络技术...

    Asp.Net URL重写-URLReWrite

    ASP.NET的URL重写(URLRewrite)是一个强大的功能,它允许开发者隐藏实际的Web页面地址,提供更友好的、可读性强的URL,从而提高用户体验和搜索引擎优化(SEO)。在本文中,我们将深入探讨ASP.NET URL重写的核心概念...

    UrlReWrite(Url重写或伪静态)完美示例源码

    描 述:UrlReWrite(Url重写或伪静态)完美示例源码 UrlReWrite(Url重写或伪静态)完美示例源码,已利用ActionlessForm解决原始地址form回传的问题 例如:/products.aspx?category=books 转换为/products/Books....

    UrlReWrite(Url重写或伪静态)

    UrlRewrite是一个强大的URL管理工具,它主要用于将复杂的URL转换为简单、易记且友好的形式,这个过程被称为URL重写或伪静态处理。在Web开发中,URL重写技术对于提升用户体验、优化搜索引擎排名(SEO)以及维护网站...

    net用url重写URLReWriter实现任意二级域名

    通过以上步骤,你可以在.NET环境中利用URLReWriter组件实现对任意二级域名的重写,从而增强网站的功能性和用户体验。然而,正确配置和理解URL重写的过程对于确保其有效运行至关重要。务必仔细测试每一个规则,避免...

    url重写组件,URLRewrite

    标题中的“URL重写组件,URLRewrite”指的是在Web开发中用于管理应用程序URL的一种技术。URL重写是将用户请求的实际URL(可能是复杂的查询字符串)转换为更友好的、可读性更强的URL,这在提升用户体验和SEO(搜索...

    urlrewrite重写URL伪静态请求路径.

    标题 "urlrewrite重写URL伪静态请求路径" 涉及到的是Web开发中的一个重要概念——URL重写,这是为了优化网站的SEO(搜索引擎优化)和用户体验而进行的一种技术手段。URL重写允许我们将复杂的动态URL转换为简洁、易于...

    IIS Urlrewrite2

    6. **网站迁移**:在网站迁移或域名更换时,URL重写可帮助自动将旧URL指向新URL,减少流量损失。 ### 三、IIS URL重写2的配置与使用 配置IIS URL重写2通常涉及以下步骤: 1. **安装**:下载并安装IIS URL重写2的...

    UrlRewrite实现伪静态

    UrlRewrite是一个强大的URL重写工具,常用于Java Web应用中,它基于Tuckey开源项目,能够帮助开发者实现URL的美化,进而提高网站的用户体验和SEO(搜索引擎优化)效果。在本文中,我们将深入探讨如何使用UrlRewrite...

Global site tag (gtag.js) - Google Analytics