ASP.NET UrlRewrite简单学习总结,转

Url Rewrite实现方式

  1. 实现的方式有两种:IIS级别和ASP.NET级别。
  2. IIS级别需要在IIS上进行操作,不过能够支持ASP.NET和PHP、ASP之类的UrlRewrite。IIRF 是个不错的选择,免费开源的IIS UrlRewrite组件。
  3. ASP.NET级别的则比较简单。无需对IIS进行设置,虽然性能会比较差一点,可是这个在低负荷基本上可以忽略不计。UrlRewriter.NET是个不错的ASP.NET UrlRewrite主机,可配置性非常强,具体可以查看它的帮助文档,文档虽然是英文的,可是比较简单,基本大家都是能看得懂的。

UrlRewriter.NET配置

  1. 可以去UrlRewriter.NET的官网下载组件。我这里下载的是2.0rc1的版本,解压后将.bin文件复制到项目的bin文件夹中。
  2. 对项目的web.config进行配置。

    在<configuration>中增加以下配置节,这个是告诉UrlRewriter.NET相关的mapping配置在哪里。

    <configSections>

    <section name="rewriter"

    type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,

    Intelligencia.UrlRewriter" />

    </configSections>

    在<system.web>增加如下内容,添加一个httpModules,这个是固定的,作用是让UrlRewriter.NET生效。
  3. <httpModules>

    <add name="UrlRewriter"

    type="Intelligencia.UrlRewriter.RewriterHttpModule,

    Intelligencia.UrlRewriter" />

    </httpModules>

    在<configuration>中增加一个<rewriter> ,这个是映射的具体配置,具体如何配置,请移步到官方帮助文档。我的一个简单配置如下:

    <rewriter>

    <rewrite url="^/UrlMappingTest/page/(\w+)$" to="~/Default.aspx?page=$1" processing="stop" />

    </rewriter>

  4. 经过以上的步骤之后,基本上UrlRewrite已经差不多了。不过由于ASP.NET的原因,当我们页面回传(例如触发一个Botton的Click事件)之后,地址栏的地址便会改变,变成映射的地址了。

利用ControlAdapter改进UrlRewrite

  1. 在项目的App_Code文件夹下新建一个类文件FormRewriterControlAdapter.cs,内容如下:
  1. 在项目的App_Browsers文件下新建一个Form.browser文件,内容如下

    <browsers>

    <browser ref>

    <controlAdapters>

    <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"

    adapterType="FormRewriterControlAdapter" />

    </controlAdapters>

    </browser>

    </browsers>

  2. FormRewriterControlAdapter 类的作用是从写ASP.NET页面中默认Form的Action属性,使他变得和UrlRewrite后的的Url一致。而Form.browser则起 到了告诉ASP.NET在生成Form的HTML代码的时候,需要执行相应的操作。