投稿 评论 顶部

Asp.Net Url重写伪静态

佚名 网络安全
? Asp.Net Url重写伪静态UrlReWriter学习示例
2010-07-08 15:09

应用环境: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&amp;id2=$2</SendTo>
????? </RewriterRule>
????? <RewriterRule>
??????? <LookFor>~/([a-zA-Z0-9]{1,})/(\d{1,})/Default\.aspx</LookFor>
??????? <SendTo>~/TwoParam.aspx?id1=$1&amp;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&amp;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