asp.net URL地址重写(伪静态)学习实例

发布时间:2020-09-18编辑:脚本学堂
本文介绍下,在asp.net中实现url地址重写,即伪静态的学习实例,有需要的朋友,可以参考下。

首先,下载本文要用的URL重写组件:
1、URL重写urlrewriter.dll组件下载地址(附完整示例代码)
2、微软URL重写组件urlrewriter.dll下载地址

配置,形如这样:
 

复制代码 代码示例:
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>

1、在Web.Config的<system.web>和</system.web>添加以下节点:
 

复制代码 代码示例:
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>

2、在Web.Config的<configuration>和</configuration>添加以下节点:
 

复制代码 代码示例:
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/Read(.[0-9]*).aspx</LookFor>
<SendTo>~/read.aspx?id=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Read,(.[0-9]*),(.[0-9]*).aspx</LookFor>
<SendTo>
<![CDATA[~/read.aspx?id=$1&SmallSortID=$2]]>
</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>

设置完以上两个步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。大家应该注意到了我写了2组<RewriterRule/>,其中第一组的是给单参数的地址用的,而另一组是给多参数动态文件用的。

注意:
1.不能使用Windows身份验证用户权限. 应使用Form验证,在web.config配置为:<authentication mode="Forms" />
2.使用Request.ServerVariables["script_name"]获得的路径仍然是:ShowPlay.asp?vid=1
3.被重写的地址如果回发,重写将失效 显示的地址将是ShowPlay.asp?vid=1
4. 后缀名必须为.aspx.如果是其他自定义后缀名,如.net  请在iis将.net映射到aspnet_isapi.dll.这样.net请求才能
到达asp.net引擎.

提示:
类似这样的地址:
http://**.com/2007/07/11/135645/
其实也是重写,只是这个的使用必须要跟着建立相应的目录,譬如上面的这个地址,必须要建立READ、2007、07、11、135645这些目录,虽然里面不需要存在文件,但建立还是有必要的。

(一)、扩展名不变的重写:
重写规则:
 

复制代码 代码示例:
<add name="RewritePhoto" virtualUrl="^~/(d+).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />
 

IIS配置:(此配置应该为默认配置,但有的虚拟主机提供商修改了此配置)
网站->属性->目录->配置(G)...->映射->应用程序扩展->扩展名 .aspx ->编辑->"确认文件是否存在"复选框不选

(二)、伪静态重写,扩展名为.html等
重写规则:
 

复制代码 代码示例:
<add name="RewritePhoto" virtualUrl="^~/(d+).html"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />
 

IIS配置:网站->属性->目录->配置(G)...->映射->应用程序扩展->添加
可执行文件:c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll
扩展名:.html
动作:限制为 GET,HEAD,POST,DEBUG
脚本引擎:选中
确认文件是否存在:不选

(三)、任意扩展名的重写 如:扩展名为.zxjay
重写规则:
 

复制代码 代码示例:
<add name="Rewrite1" virtualUrl="^~/(d+).zxjay"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" /> 
 

IIS配置:同上

(四)、无后缀的重写
重写规则:
 

复制代码 代码示例:
<add name="Rewrite1" virtualUrl="^~/(d+)/Default.aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />

IIS配置:网站->属性->目录->配置(G)...->映射->通配符应用程序映射->插入
可执行文件:c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll
确认文件是否存在:不选

(五)、二级域名到多级域名的重写
(注意:由于条件的限制,该规则没有测试,理论上可以实现,如果有错误,请留言指正,谢谢!)
重写规则:
 

复制代码 代码示例:
<add name="Rewrite1" virtualUrl="^http://(.*).jb200.com/Default.aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/Default.aspx?ID=$1"
     ignoreCase="true" />