在asp.net中实现URL Rewrite,除了IIS本身带的URL Rewrite Module以外,还有很到其他的解决方案,比如UrlRewritingNET。
UrlRewritingNET号称除了文件扩展名Rewrite需要IIS支持以外,其他所有操作都不需要IIS设置,这当然对虚拟主机的网站来说是非常便利的。
下面看看怎么来部署UrlRewritingNET:
1. 首先将下载的dll放置到bin目录
2. 修改Web.config,增加UrlRewritingNET的相关配置如下:
<?xml version="1.0"?>
<configuration><br><configsections><br><section name="urlrewritingnet"></section> requirePermission="false" <br> type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/> <br></configsections><br><urlrewritingnet rewriteonlyvirtualurls="true"></urlrewritingnet> contextItemsPrefix="QueryString" <br> defaultProvider="RegEx" <br> xmlns="<a href="http://www.urlrewriting.net/schemas/config/2006/07">http://www.urlrewriting.net/schemas/config/2006/07"</a>> <br><rewrites><br><add name="category"></add> virtualUrl="^~/category/(.*)" <br> rewriteUrlParameter="ExcludeFromClientQueryString" <br> destinationUrl="~/index.html?category=$1" <br> redirect="Application" <br> ignoreCase="true"/> <br><add name="book"></add> virtualUrl="^~/book/(.*),index.xml" <br> rewriteUrlParameter="ExcludeFromClientQueryString" <br> destinationUrl="~/reader.html?book=$1" <br> redirect="Application" <br> ignoreCase="true"/> <br><add name="categoryAPI"></add> virtualUrl="^~/api/category/(.*)" <br> rewriteUrlParameter="ExcludeFromClientQueryString" <br> destinationUrl="~/api/Category.ashx?path=$1" <br> ignoreCase="true"/> <br><add name="bookAPI"></add> virtualUrl="^~/api/book/(.*)" <br> rewriteUrlParameter="ExcludeFromClientQueryString" <br> destinationUrl="~/api/Book.ashx?path=$1" <br> ignoreCase="true"/> <br><add name="metaAPI"></add> virtualUrl="^~/api/meta/(.*)" <br> rewriteUrlParameter="ExcludeFromClientQueryString" <br> destinationUrl="~/api/Meta.ashx?path=$1" <br> ignoreCase="true"/> <br></rewrites><br><br><system.web><br><httpmodules><br><add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"></add><br></httpmodules><br></system.web><br></configuration>
3. 嵌入Rewrite规则,在<rewrites>中。virtualUrl是正则表达式的虚拟URL,destinationUrl是目标的URL。如果表明redirect,则UrlRewritingNET会通过HTTP 301,302重定位,浏览器显示的网址会有所变化</rewrites>
4. 需要注意的是,需要添加Global.asax,UrlRewritingNET才会生效