在ASP.Net2.0中使用UrlRewritingNet实现链接重写

简介: 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向、文章访问链接等场合。让我们看两个例子:1 你现在看到的当前作者的博客园的域名:http://heekui.cnblogs.com 实际上是 http://www.cnblogs.com/heekui 的一种链接重写(Url Rewriting)。
很多时候我们需要链接转向(Url Rewriting),例如二级域名转向、文章访问链接等场合。

让我们看两个例子:

1 你现在看到的当前作者的博客园的域名:
http://heekui.cnblogs.com 实际上是 http://www.cnblogs.com/heekui  的一种链接重写(Url Rewriting)。

2 codeproject上的文章,我们获取的地址都是以文章主要关键字做的网页名称:
http://www.codeproject.com/cs/webservices/wsdlparser.asp 
个人觉得实际的文章链接可能是如下格式(纯属猜想)
http://www.codeproject.com/news.asp?id=123456  


那么如何在Asp.net2.0中如何实现链接重写呢?
可以采用UrlRewritingNet.UrlRewriter.dll来轻松实现
UrlRewritingNet.UrlRewriter.dll 可从其官方网站下载:
http://www.urlrewriting.net

我们要做的就是进行Web.Config文件的设置

0 设置之前需要添加引用:UrlRewritingNet.UrlRewriter.dll
1 <configSections>间添加:
  <configSections>
  <section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/>
 </configSections>
2   添加httpModules
  <httpModules>
      <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
  </httpModules>
3 添加链接重写的设置
 <urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="default.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
  <rewrites>
   <add name="Rewrite1" virtualUrl="^http\://(.*)/UrlRewritingTest/test.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/default.aspx" rewrite="Domain" ignoreCase="true"/>
   <add name="Rewrite2" virtualUrl="^http\://(.*)/UrlRewritingTest/test1.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/info.aspx?year=2007&amp;month=3&amp;day=9" rewrite="Domain" ignoreCase="true"/>
  </rewrites>
 </urlrewritingnet>

完整的一个Web.Config文件
img_a6339ee3e57d1d52bc7d02b338e15a60.gif <? xml version="1.0" ?>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
< configuration >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
< configSections >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
< section  name ="urlrewritingnet"  restartOnExternalChanges ="true"  requirePermission ="false"  type ="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
</ configSections >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
< urlrewritingnet  rewriteOnlyVirtualUrls ="true"  contextItemsPrefix ="QueryString"  defaultPage ="default.aspx"  defaultProvider ="RegEx"  xmlns ="http://www.urlrewriting.net/schemas/config/2006/07" >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
< rewrites >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
< add  name ="Rewrite1"  virtualUrl ="^http\://(.*)/UrlRewritingTest/test.aspx"  rewriteUrlParameter ="ExcludeFromClientQueryString"  destinationUrl ="~/default.aspx"  rewrite ="Domain"  ignoreCase ="true" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
< add  name ="Rewrite2"  virtualUrl ="^http\://(.*)/UrlRewritingTest/test1.aspx"  rewriteUrlParameter ="ExcludeFromClientQueryString"  destinationUrl ="~/info.aspx?year=2007&amp;month=3&amp;day=9"  rewrite ="Domain"  ignoreCase ="true" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
< add  name ="Rewrite3"  virtualUrl ="^http\://(.*)/UrlRewritingTest/test(\d{4})(\d{2})(\d{2}).aspx"  rewriteUrlParameter ="ExcludeFromClientQueryString"  destinationUrl ="~/info.aspx?year=$2&amp;month=$3&amp;day=$4"  rewrite ="Domain"  ignoreCase ="true" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
< add  name ="Rewrite4"  virtualUrl ="^http\://(.*)/UrlRewritingTest/(\d{4})/(\d{2})/(\d{2})/info.aspx"  rewriteUrlParameter ="ExcludeFromClientQueryString"  destinationUrl ="~/info.aspx?year=$2&amp;month=$3&amp;day=$4"  rewrite ="Domain"  ignoreCase ="true" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif      
< add  name ="Rewrite5"  virtualUrl ="^http\://(.*)/UrlRewritingTest/stock(\d{6}).aspx"  rewriteUrlParameter ="ExcludeFromClientQueryString"  destinationUrl ="~/stockinfo.aspx?code=$2"  rewrite ="Domain"  ignoreCase ="true" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
</ rewrites >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
</ urlrewritingnet >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
< appSettings />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
< system .web >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
< httpModules >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif            
< add  name ="UrlRewriteModule"  type ="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
</ httpModules >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
< compilation  debug ="true" />
img_a6339ee3e57d1d52bc7d02b338e15a60.gif  
</ system.web >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
</ configuration >
img_a6339ee3e57d1d52bc7d02b338e15a60.gif

示例程序
我们做了一个按查询字符串的输入显示对应日期的页面info.aspx
img_a6339ee3e57d1d52bc7d02b338e15a60.gif      protected   void  Page_Load( object  sender, EventArgs e)
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        
string strYear = Request.QueryString["year"].ToString();
img_33d02437d135341f0800e3d415312ae8.gif        
string strMonth = Request.QueryString["month"].ToString();
img_33d02437d135341f0800e3d415312ae8.gif        
string strDay = Request.QueryString["day"].ToString();
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        Response.Write(
string.Format("你输入的日期是{0}年{1}月{2}日",strYear,strMonth,strDay));
img_05dd8d549cff04457a6366b0a7c9352a.gif    }

常规访问方式: http://localhost/UrlRewritingTest/info.aspx?year=2007&month=03&day=08


页面重写方式1: http://localhost/UrlRewritingTest/test20070308.aspx
UrlRewriting1.JPG

页面重写方式2: http://localhost/UrlRewritingTest/2007/03/08/info.aspx
UrlRewriting2.JPG

大家可以看到实际的访问效果是一致的。

示例文件中还有一个股票信息查看的例子:
http://localhost/UrlRewritingTest/stock600616.aspx = http://localhost/UrlRewritingTest/stockinfo.aspx?code=600616

示例程序下载: /Files/heekui/UrlRewritingTest.rar
目录
相关文章
|
前端开发 NoSQL .NET
一起谈.NET技术,重构TekPub——从ASP.NET MVC框架迁移到Ruby on Rails
  TekPub是一个面向开发人员的站点,致力于为开发人员提供一系列主题的在线培训,主题范围非常广泛,从微软的O/R Mapping框架Microsoft Entity Framework,到如何使用Ruby on Rails技术编写自己的日志引擎等内容都有涉及。
1599 0
|
Web App开发 SQL 前端开发
一起谈.NET技术,鲜为人知的ASP.NET MVC 2.0框架高效之谜
  要想建立开发环境,你需要安装Visual Studio 2008/2010 Beta 2,以及SQL Express 2005(可免费从MSDN下载)和MVC 2.0框架。我把本文中的示例Web应用命名为“Employee Master Information”。
989 0
|
存储 缓存 .NET
一起谈.NET技术,提高ASP.NET应用程序性能的十大方法
  一、返回多个数据集   检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。
1209 0
|
XML 前端开发 .NET
一起谈.NET技术,ASP.NET MVC 2生成动态表单的一种最简单的思路
  在BPM、OA等系统中,都会存在一个表单设计器。有些是通过操作gridview来完成一个表单的设计;有些是通过类似VS拖拽的方法完成一个表单的设计。很明显后面一种优越于前面一种。无论是哪种,最后都会产生一些XML之类的表单结构的数据。
1286 0
|
Web App开发 .NET 数据安全/隐私保护
一起谈.NET技术,ASP.NET身份验证机制membership入门——项目
  前面说了很多关于membership的内容,感觉内容有点凌乱,内容都是一个个知识点,下面我们通过一个小的项目,来把所有的相关内容串一下。   首先描述一下需求:   我们要做一个最简单的网站。有三类用户:匿名用户,员工,管理员,网站结构如下:        admin目录下的页面只允许admin角色的用户访问,employee目录下的页面只允许emp角色的用户访问。
1088 0
|
缓存 算法 .NET
一起谈.NET技术,ASP.NET缓存全解析7:第三方分布式缓存解决方案 Memcached和Cacheman
  ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓存 ASP.NET 缓存全解析5:文件缓存依赖 ASP.NET 缓存全解析6:数据库缓存依赖 ASP.NET 缓存全解析7:第三方分布式缓存解决方案 Memcached和Cacheman   Memcached — 分布式缓存系统    1.Memcached是什么?   Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
1175 0
|
前端开发 .NET 测试技术
一起谈.NET技术,在ASP.NET MVC中进行TDD开发
  TDD介绍   TDD是一种开发方法,全称是Test-Driven development,中文是测试驱动开发。作者是Kent Beck。首先让我介绍一下三种常见的开发方式:   第一种:先Coding,然后Bug Fix。
967 0
一起谈.NET技术,ASP.NET2.0服务器控件之类型转换器
类型转换器是实现自定义服务器控件属性过程中比较重要的内容。本文将对类型转换器的基本概念和实现方法进行介绍。  1. 类型转换器基本概念  类型转换器是自定义服务器控件的辅助性功能实现。它主要用于执行从字符串表示形式到指定类型之间的双向转换。
678 0
|
关系型数据库 MySQL C#
一起谈.NET技术,经验之谈:MySQL与ASP.NET配合更强大
  由于富有竞争力的价格和易于使用,MySQL在市场占有率方面逐步提升。开放源代码社区为了扩展MySQL的使用范围,开发出了.Net框架(.NET Framework)中可以使用的数据库连接器。我们就来学习一下如何在.Net应用程序中使用MySQL。
1493 0
|
Web App开发 前端开发 .NET
一起谈.NET技术,ASP.NET MVC2中Controller向View传递数据的三种方式
  在Asp.net mvc开发中,Controller需要向View提供Model,然后View将此Model渲染成HTML。这篇文章介绍三种由Controller向View传递数据的方式,实现一个DropDownList的显示。
936 0