博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
阅读量:6904 次
发布时间:2019-06-27

本文共 4123 字,大约阅读时间需要 13 分钟。

核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度...

大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度,坏处就是生成列表的时候会因为增加一条记录从而需要所有相关的列表进行重构,当然不排除有的公司已经攻克的这个问题,但对于大众程序员来说,他依旧是个问题,而且生成的化对于中小型网站也不一定会比动态的号,因为管理比较麻烦。

结构以上事实,然后伪静态技术产生了,规范的说就是URL重写技术,他对于ASPX格式支持最好,当然也可以重写HTML格式的文件,但这需要IIS的设置,相对比来说,ASPX格式的更方便,本站就是采用了该URL重写技术,这个技术优点显而易见:方便搜索引擎收录,方便查看,等等。那么接下来我们来看看如何配置他吧

首先你要在你的项目里引用两个DLL:

URLRewriter.dll
ActionlessForm.dll

真正实现重写的是 URLRewriter.dll 但是如果你要实现分页,那么必须使用这个ActionlessForm.dll

2、配置WEB.CONFIG文件

在项目中引用这个程序集,伪静态语法...(例把.aspx 的页面 用.html来表示,web.config文件中--> 添加 以下节点
~/cn/ss_(.[\d]*)0(.[\w]*).html
~/cn/ss_(.[\d]*)0(.[\w]*)0(.[\w]*).html
~/dfsaddf/index(\d*)\.html
~/Favorites_Page.aspx

设置完以上步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。3、配置IIS解析.html文件

配置IIS6.0IIS配置:网站->属性 ->虚拟目录->配置(G)...->映射->通配符应用程序映射->添加
可执行文件:c:\windows\microsoft.net\framework\v2.0.50727 \aspnet_isapi.dll
扩展名为:.html

确认文件是否存在:不选.

配置IIS7.5你的网站-->IIS中处理程序映射-->
添加脚本映射(路径:*.html 可执行文件%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 名称:任意,比如Hml )
添加通配符脚本映射(路径:* 可执行文件:C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 名称:任意,比如All)
托管处理程序映射(路径:* 可执行文件:System.Web.UI.PageHandlerFactory 名称 任意 比如Html-Integrate)-------->
IIS中 模块-->添加---->(名称:任意 如All 类型:URLRewriter.ModuleRewriter 把 仅针对向asp.net 应用程序或托管处理程序发出请求调用 勾上 ok )
-->ok
4、以上配置好之后就可以通过以下方式来访问了
例如用户输入 hostname/d11.html,
服务器会把他重写为http://hostname/default.aspx?id=11。
换句话说用户输入http://hostname/d11.html,
实际访问的是http: //hostname/default.aspx?id=11
ActionlessForm.dll
namespace ActionlessForm {     public class Form : System.Web.UI.HtmlControls.HtmlForm     {         protected override void RenderAttributes(HtmlTextWriter writer)         {             writer.WriteAttribute("name", this.Name);             base.Attributes.Remove("name");             writer.WriteAttribute("method", this.Method);             base.Attributes.Remove("method");             this.Attributes.Render(writer);             base.Attributes.Remove("action");             if (base.ID != null)                 writer.WriteAttribute("id", base.ClientID);         }     } }

创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要 使用它来代替 HtmlForm 类,做法是在 ASP.NET 网页的顶部添加以下内容:<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %> 然后,将 <form runat="server">(如果有)替换为: <skm:Form id="Form1" method="post" runat="server"> 并将右边的 </form> 标记替换为:

</skm:Form>成功!

这里要注意一点,如果你想访问http://域名/C/303/168.html和访问http://域名/C/303/168.htm都是访问同一个实际地址的话,而不会出现资源未找到的提示,需要在配置文件的<httpHandlers></httpHandlers>间加这样一行代码:<add verb="*" path="*.htm" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />;从这儿也能看出<LookFor></LookFor>)中URL后面文件的扩展名需要在<httpHandlers></httpHandlers>中配置。

在页面上加超链接也要注意了,超链接也要根据配置改了

          <a href="<%=ResolveUrl("index.html") %>">首页</a> (实际访问的是default.aspx)

          <a href="<%=ResolveUrl("I/158.html")%>">新闻动态</a> (实际访问的是InfoList.aspx?id=158)
          <a href="<%=ResolveUrl("C/378.html")%>" 关于我们</a> (实际访问的是Content.aspx?id=378)
          <a href="<%=ResolveUrl("C/381/167.html")%>">O,Yeah!</a> (实际访问的是Content.aspx?id=381&Catalogid=167)

   对于服务器控件请求的资源,可以使用“~/文件路径及文件名”,而对于HTML控件和元素,可以使用上面的方法。

五、解决回发后真实路径再现的问题

      (你在页面上加一个Button,运行后点下试试)

      1、将ActionlessForm.dll添加到项目的bin文件夹

      2、在aspx网页的代码中加<%@ Register TagPrefix="RW" Namespace="ActionlessForm" Assembly="ActionlessForm" %>(加载Page命令后面一行吧)

      3、然后将form标签改为RW:Form(注意开始和结束都要改),TagPrefix可以自定义

转载地址:http://wwldl.baihongyu.com/

你可能感兴趣的文章
nginx虚拟主机配置
查看>>
关于对char类型数据赋予负值的汇编表现
查看>>
润乾报表在proxool应用下的数据源配置
查看>>
Python基础23_os,sys,序列化,pickle,json
查看>>
python MVC、MTV 框架介绍 Django 模板系统常用语法
查看>>
Day06
查看>>
C语言结构体在内存中的存储情况探究------内存对齐
查看>>
wamp版本升级小问题记录
查看>>
去中心化
查看>>
win10安装MarkdownPad 2报错This view has crashed的处理及md简单语法
查看>>
Unity3D - 设计模式 - 工厂模式
查看>>
第二十六课:jQuery对事件对象的修复
查看>>
Leetcode题目:Swap Nodes in Pairs
查看>>
Windows聚焦转为图片
查看>>
POJ NOI0101-09 字符菱形
查看>>
jQuery--停止动画和判断是否处于动画状态stop()
查看>>
iPhone 物理尺寸与分辨率
查看>>
win10系统下cmd输入一下安装的软件命令提示拒绝访问解决办法
查看>>
OpenJudge/Poj 1004 Financial Management
查看>>
面向服务(接口)开发过程中常用的实体类数据复制解决方案
查看>>