asp.net 使用UrlRewritingNet.UrlRewriter组件URL重写,伪静态详解


URL重写的业务需求

  • url有意义,便于记忆URL
  • 利于搜索引擎收录
  • 便于更新
  • 隐藏实际文件路径,提高网站的安全性

ReWritingNet组件主要功能

  • 基于正则表达式的重写
  • 支持Themes和母版页
  • 支持输出缓存
  • 支持信任级别为"Medium"的使用环境
  • 支持Postback
  • 支持无Cookie的Session
  • 运行时添加、修改改写规则
  • 容易安装使用

配置IIS(IIS7/8环境下)

  1. 下载伪静态组件:http://www.iis.net/downloads/microsoft/url-rewrite
  2. 安装伪静态组件

程序代码

  1. 引入Dll文件

把UrlRewritingNet.UrlRewriter.dll文件添加的工程的Bin文件下

  1. Web Config配置

    1. 首先、在ConfigSections节新增Section,如下

      <configSections>
          <section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/>
      </configSections>
      
    2. 在 <system.web>节点下配置如下内容

      <httpModules>
          <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
      </httpModules>
      

      HttpModule 是实现 IHttpModule 接口和处理事件的程序集。ASP.NET 包含一组可由应用程序使用的 HttpModule 模块。例如,ASP.NET 提供了 SessionStateModule 来向应用程序提供会话状态服务。可以创建自定义 HttpModule以响应 ASP.NET 事件或用户事件

    3. 节点配置重写规则,或者重新新建一个urlrewriting.config来配置重写规则

      <?xml version="1.0" encoding="utf-8"?>
      <urlrewritingnet rewriteOnlyVirtualUrls="true" defaultPage=""  contextItemsPrefix="QueryString"  defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
          <rewrites>
              <!--首页-->
              <add name="eshop" virtualUrl="^~/(\d+).html" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/VipStore/5/Index.aspx?StoreID=$1" ignoreCase="true"/>
              <!--默认-->
              <add name="default" virtualUrl="^~/default.html" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Search.aspx" ignoreCase="true"/>
            <add name="default2" virtualUrl="^~/default.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Search.aspx" ignoreCase="true"/>
            <add name="default3" virtualUrl="^~/" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Search.aspx" ignoreCase="true"/>
          </rewrites>
      </urlrewritingnet>
      

重写规则

  1. 扩展名不变的重写

    <add name="default2" virtualUrl="^~/default.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Search.aspx" ignoreCase="true"/>
    
  2. 伪静态重写,扩展名为.html

    <add name="default" virtualUrl="^~/default.html" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Search.aspx" ignoreCase="true"/>
    
  3. 任意扩展名的重写 如:扩展名为.tkx,配置和伪静态一样配置

    <!--    任意扩展名的重写如:扩展名为.tkx-->
    <add name="RewriteIndex" virtualUrl="^~/index_(\d+).tkx"
             rewriteUrlParameter="ExcludeFromClientQueryString"
                destinationUrl="~/index2.aspx?ID=$1"
                ignoreCase="true" />
    

    IIS配置:扩展名如果不在IIS处理程序映射内,那么需要添加对应的处理程序映射

    可执行文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

  4. 无后缀的重写

    <add name="muying" virtualUrl="^~/muying/" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Muying.aspx"  ignoreCase="true"/>
    
  5. 二级域名到多级域名的重写

    <add name="Rewrite1" virtualUrl="^http\://(.*).xianfen.net/Default.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?ID=$1" ignoreCase="true" />
    

    注意,在进行二级域名重写时要对一个地方进行重新设置:

    <urlrewritingnet rewriteOnlyVirtualUrls="true" 改为 false contextItemsPrefix="QueryString" defaultPage = "Default.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07" > 
    

    重写规则、参数个数等等可以自己定义,还可以在运行时添加、修改重写规则,也可以扩展该组件的功能来满足形形色色的需求。具体可查看其文档和源码。

知识共享许可协议
《asp.net 使用UrlRewritingNet.UrlRewriter组件URL重写,伪静态详解》 常伟华 创作。
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议 | 3.0 中国大陆许可协议进行许可。

站内公告

A PHP Error was encountered

Severity: Core Warning

Message: PHP Startup: zip: Unable to initialize module Module compiled with module API=20060613 PHP compiled with module API=20090626 These options need to match

Filename: Unknown

Line Number: 0

Backtrace: