应用环境:VS2008 + .Net FrameWork 3.5
网上相关的例子也很多,基本也都是雷同的,也基本都能用,我只是把自己的操作过程记录下面,方便自己下次应用。
建议有空看一下这篇文章:在 ASP.NET 中执行 URL 重写 (真是惭愧,2004发布的好文章,我现在才看到。)
下面开始说操作步骤:
1、下载UrlReWriter组件,微软官方下载,安装之后,将RewriterTester\bin目录下面的两个dll复制过来。
2、web.config配置
A、<configuration> <configSections>节点下面加:
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
B、<httpModules>节点下面加:
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/>
C、URL重写规则在configuration节点下面添加:
<RewriterConfig>
<Rules>
<!-- Rules for Blog Content Displayer -->
<RewriterRule>
<LookFor>~/(\d{1,})/Default\.aspx</LookFor>
<SendTo>~/OneParam.aspx?id1=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{1,})/Default\.html</LookFor>
<SendTo>~/OneParam.aspx?id1=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/([a-zA-Z]*)/Default\.aspx</LookFor>
<SendTo>~/OneParam.aspx?id1=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{1,})/(\d{1,})/Default\.aspx</LookFor>
<SendTo>~/TwoParam.aspx?id1=$1&id2=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/([a-zA-Z0-9]{1,})/(\d{1,})/Default\.aspx</LookFor>
<SendTo>~/TwoParam.aspx?id1=$1&id2=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/test\.aspx</LookFor>
<SendTo><![CDATA[~/TwoParam.aspx?id1=$1&id2=$2]]></SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
3、IIS设置(如果你重新的url是aspx之外的,需要设置)
打开IIS,打开站点属性,“主目录”选项卡下面,点击“配置”,添加html的应用程序扩展名映射
4、根据重写规则来测试
示例1:
<RewriterRule>
<LookFor>~/(\d{1,})/Default\.aspx</LookFor>
<SendTo>~/OneParam.aspx?id1=$1</SendTo>
</RewriterRule>
规则的意思:/n(一位或一位以上的数字)/default.aspx 实际执行文件:OneParam.aspx?id1=n
注:Default\.asp中的“\.”,是转义句点。
例如:<a href="1234/default.aspx">测试数字</a>
实际打开的页面:OneParam.aspx?id1=123
---------------------------------------------------------------------------------------
示例2:
<RewriterRule>
<LookFor>~/(\d{1,})/Default\.html</LookFor>
<SendTo>~/OneParam.aspx?id1=$1</SendTo>
</RewriterRule>
规则的意思是:/n(一位或一位以上的数字)/default.html 实际执行的文件:OneParam.aspx?id1=n
例如:<a href="1234/default.html">测试数字</a>
实际打开的页面:OneParam.aspx?id1=123
---------------------------------------------------------------------------------------
示例3:
<RewriterRule>
<LookFor>~/(\d{1,})/(\d{1,})/Default\.aspx</LookFor>
<SendTo>~/TwoParam.aspx?id1=$1&id2=$2</SendTo>
</RewriterRule>
规则的意思是:/n(一位或一位以上的数字)/m(一位或一位以上的数字)/default.aspx 实际执行的文件:TwoParam.aspx?id1=n&id2=m
例如:<a href="123/456/default.aspx">测试多个数字参数</a>
实际打开的页面:TwoParam.aspx?id1=123&id2=456
---------------------------------------------------------------------------------------
示例4:(实际执行和示例3是一样的,区别在于两个参数id1和id2之间的连接符)
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/test\.aspx</LookFor>
<SendTo><![CDATA[~/TwoParam.aspx?id1=$1&id2=$2]]></SendTo>
</RewriterRule>
使用使用 <![CDATA[...]]> 元素对SendTo的内容进行了转义
经过上面的步骤,基本上解决了URL中文件的重写问题。
有些用户可能习惯于用http://www.****.com/News/,http://www.****.com/Products/这样的目录重写。
其实http://www.***.com/News/默认访问的是News目录下面的默认首页,默认首页根据iis里面的默认内容文档设置。实际应用的规则就是(假设默认首页是index.aspx):
<RewriterRule>
<LookFor>~/News/index\.aspx</LookFor>
<SendTo>~/News.aspx</SendTo>
</RewriterRule>
但有个问题必须注意:
在站点的目录下面,必须建立相应的目录和文件,上面的重写规则才有效。
上面的例子:就是在根目录下面建立News的目录,同时News目录下面建立一个文件index.aspx(只要有这个文件就行,文件不需要处理任何事件)
到此,基本上讲完了,把今天做的都记录下来了。
本文来自:http://hi.baidu.com/%CA%D8%CD%FB%C0%B6%CC%EC/blog/item/0964ee965663d546d1135eec.html