大家都知道web.config 中的 urlMappings怎么用
1
2
3
4
5
6
|
<system.web> <urlMappings enabled= "true" >
<add url= "~/login.html"
mappedUrl= "default.aspx?state=222" />
<add url= "~/login.aspx"
mappedUrl= "default.aspx?state=6" />
</urlMappings>
</system.web> |
这个配置可以使ASP.NET程序在ASP.NET Development
Server(就是建ASP.NET项目时选文件系统)直接支持UrlMapping,不过它有几个不足之处:
1、只能映射固定的地址,所以只能一个地址一个地址的配置
2、ASP.NET
Development
Server中可以不用配什么别的地方,在IIS中受请求响应模型所限,估计还是要在IIS中设映射。这样的话,反而搞得我到处找资料,看怎么实现在ASP.NET
Development
Server设置映射,得到的结果是不行。
针对于UrlMapping的不支持正则表达式的缺陷,我做了个支持正则表达式的UrlMapping,可惜由于UrlMapping是由HttpApplication调用的,而HttpApplication是Internal的,不能对它做什么动作,所以实现的东东和UrlMapping相比做在Web.config中多做个<Section>
(下载文件中包括RegexUrlMapping组件和一个示例ASP.NET,注意ASP.NET程序需部署在IIS中,并且要设置映射,方法是右击虚拟目录,选属性,选配置,在通配符应用程序映射中添加c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll的引用,并去掉确认文件是否存在的钩,这里是为了偷懒才用通配符全部映射到ASP.NET2.0的ISAPI,实际开发中最好酌情添加具体一点的映射)
Web.config中的配置举例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?xml version= "1.0" ?>
<configuration> <configSections>
<section name= "RegexUrlMappings"
type= "Cnblogs.DTC.THIN.RegexUrlMapping.RegexUrlMappingsSection,Cnblogs.DTC.THIN.RegexUrlMapping" />
</configSections>
<RegexUrlMappings enabled= "true"
rebaseClientPath= "true" >
<add url= "(\d+)$"
mappedUrl= "default.aspx?id=$1" />
<add url= "(?<=/)(?<id>[a-z]+)$"
mappedUrl= "default.aspx?id=${id}"
/>
<add url= "/$"
mappedUrl= "/default.aspx?id=0" />
</RegexUrlMappings>
<system.web>
<httpModules>
<add name= "RegexUrlMappingModule"
type= "Cnblogs.DTC.THIN.RegexUrlMapping.RegexUrlMappingModule,Cnblogs.DTC.THIN.RegexUrlMapping" />
</httpModules>
<compilation debug= "true" />
<authentication mode= "Windows" />
</system.web>
</configuration> |
其中RegexUrlMapping的属性enabled用于打开和关闭映射,rebaseClientPath参见HttpContext.RewritePath中rebaseClientPath参数
<add>用于添加映射规则,url为匹配路径的正则表达式pattern,mappedUrl是替换规则,用法参见Regex.Replace方法
上例中,第一个add在url中用括号定义了组1,所以在后面引用$1
第二个add在url中用(?<id>)定义了组id,后面用${id}引用了这个组
第三个是固定字符串替换
呵呵,看来正则表达式还是很重要滴~~
http://www.urlrewriting.net/159/en/downloads.html
http://urlrewriter.net/index.php/download
附另外两个地址