[转]URLRewriter使用通配符
网上有很多写这个组件使用的文章,如何使用我就不细述了,有关在 ASP.NET 中执行 URL 重写的文章请看下面链接:
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true
我这里要说的是其中几个很容易被忽视的小细节。
问题场景:
比如实际我并不存在下面三个WEB路径:
http://*******/Tag/Java
http://*******/Tag/Java/
http://*******/Tag/Java/Default.aspx
我想把它重定向到
http://*******/List.aspx?tag=Java
这时候如果我们偷懒,直接用Scott Mitchell 的 URLRewriter 组件,
需要注意的有几个地方:
1、我们需要给IIS设置通配符映射,而且这个映射必须不进行文件是否存在检查。
2、我们在WEB.config 中应该用 httpModules 来定义扑捉用户的请求,而不是 httpHandlers。
因为我们这里要处理 http://*******/Tag/Java 、 http://*******/Tag/Java/ 这样的请求。
3、设置这个信息的 Web.config 应该是根站点目录下的 Web.config,而不是 /Tag/ 目录下的Web.config。
4、要扑捉的URL应该这三种情况都计算,而不是只考虑 http://*******/Tag/Java/Default.aspx 这种情况。
参考配置如下:
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/tag/([\w]+)/default\.aspx</LookFor>
<SendTo>~/List.aspx?Tag=$1</SendTo>
</RewriterRule>
</Rules>
<Rules>
<RewriterRule>
<LookFor>~/tag/([\w]+)/</LookFor>
<SendTo>~/List.aspx?Tag=$1</SendTo>
</RewriterRule>
</Rules>
<Rules>
<RewriterRule>
<LookFor>~/tag/([\w]+)</LookFor>
<SendTo>~/List.aspx?Tag=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>