UrlRewrite(Url重写技术)

ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置------转载

ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置

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

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

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

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

URLRewriter.dll
ActionlessForm.dll

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

URLRewriter.dll
1、下载文件
下载地址1:http://download.csdn.net/source/524514
下载地址2:http://www.nmju.net/UserFiles/URLRewriter.rar
下载地址3:http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
下载地址4:本站下载

2、配置WEB.CONFIG文件
在项目中引用这个程序集,伪静态语法...(例把.aspx 的页面 用.html来表示,web.config文件中--> 添加 以下节点
<configuration>
  <configSections> 
    <section name="RewriterConfig" requirePermission="false" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
  </configSections> 

  <RewriterConfig> 
    <Rules> 
      <RewriterRule><!--一个参数-> 
        <LookFor>~/cn/ss_(.[\d]*)\.html</LookFor> 
        <SendTo>~/cn/news.aspx?id=$1</SendTo> 
      </RewriterRule> 
      <RewriterRule><!--传两个参数的--> 
        <LookFor>~/cn/ss_(.[\d]*)0(.[\w]*).html</LookFor> <!--(.[\d]*)(.[\w]*).html  或者 ss_,(.[0-9]*),(.[0-9]*)\.html--> 
        <SendTo><![CDATA[~/cn/news.aspx?id=$1&sid=$2]]></SendTo> 
      </RewriterRule> 
      <RewriterRule><!--三个参数--> 
        <LookFor>~/cn/ss_(.[\d]*)0(.[\w]*)0(.[\w]*).html</LookFor>
        <SendTo><![CDATA[~/ZH-CN/news.aspx?id=$1&sid=$2&n_id=$3]]></SendTo> 
      </RewriterRule>
      <RewriterRule>
        <LookFor>~/dfsaddf/index(\d*)\.html</LookFor>
        <SendTo>~/Favorites_Page.aspx</SendTo>
      </RewriterRule>
    </Rules> 
  </RewriterConfig>
</configuration>


<system.web>
  <httpHandlers> 
        <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
        <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
  </httpHandlers>
</system.web>

<!--
<httpModules> 
      <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/> 
</httpModules>
-->

设置完以上步骤,就基本可以运行了,其中<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>

 

成功!
虚拟主机

在网上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle+Server.Transfer的方法。其实这种方法是错误的。

第一,HttpHandle是实现不了urlrewrite的;

第二Server.Transfer是标准的重定向,根本不是urlrewrite。

其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现。我这里介绍的是在虚拟主机上,虚拟主机不同于自己的服务器,你是没有权限去修改iis,也没有权限去安装iis rewrite之类的iis插件。但是我们仍然可以轻松完成需要的功能。具体做法如下:打开global.asax.cs,定位到protected void Application_BeginRequest(Object sender, EventArgs e)。从方法名我想也能猜到它是做什么的。输入如下代码:


 

protected void Application_BeginRequest(Object sender, EventArgs e) 

string oldUrl = HttpContext.Current.Request.RawUrl ;
string pattern = @"^(.+)default/(\d+)\.aspx(\?.*)*$"; 
string replace = "$1default.aspx?id=$2"; if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled)) 

string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled | RegexOptions.IgnoreCase);  
this.Context.RewritePath(newUrl);  
}  
}

有了上边这段代码,我访问一个类似:.../default/123.aspx 的网址,当然这个网址在我的电脑上不存在,它就会被定向到:.../default.aspx?id=123。

当然,利用功能强大的正则表达式,你可以任意按照自己的需要来重写url,这一切都是在服务器端默默的进行,在客户端是不会有任何察觉的。由于是在虚拟主机上,我们只能重定向.aspx文件,如果是自己的服务器,只要把后缀名在iis中注册一下,就可以实现任意后缀名的处理。比如你可以注册一个*.myweb这样的类型,这样别人访问default/456.myweb时,你可以把它重定向到default.aspx?id=456。总之一句话,只要你能想到,.net就可以帮你实现,并且这一切不需要多少的代码。

转载于:https://www.cnblogs.com/yzenet/archive/2012/10/04/2711369.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“快准顺”而不是“信达雅”

在今年夏天策马翻译举办的翻译讲座上&#xff0c;我和詹成教授交流过一个问题&#xff1a;詹教授讲的很多知识点和经验并不符合“信达雅”&#xff1f;詹教授的回答是&#xff1a;“信达雅”并非翻译界的标准&#xff0c;他自己在日常翻译工作中的标准是“快准顺”。詹教授的回…

知乎点赞超过10万的科学脱单法!这绝对是我见过最硬核的撩妹套路......

全世界只有3.14 % 的人关注了爆炸吧知识科学脱单硬核撩妹前两天&#xff0c;超模君在知乎上看到一个热门的问答&#xff1a;开学后如何快速找到对象&#xff1f;这个话题&#xff0c;让超模君回想起了当年刚进入大学的那会儿&#xff0c;校园中秀恩爱的情侣无处不在&#xff0c…

二叉树的非递归遍历

非递归实现二叉树的前序/后序/中序遍历 中序遍历 // arr[1]// arr[2] arr[3] // arr[4] arr[5] arr[6] // arr[7] arr[8]如上数据, 以栈来代替递归实现,输出为4,2,(遍历右元素7,5,8).那么就要想办法以上面的方法入栈4,2…

InfoQ宣布成立CNUT容器技术俱乐部 欲连接中国容器社区

2015年8月28日&#xff0c;首届CNUTCon全球容器技术大会在北京举行。在大会上&#xff0c;极客邦科技与InfoQ中国创始人兼CEO霍泰稳宣布&#xff0c;InfoQ联合国内一线IT技术公司共同成立CNUT容器技术俱乐部&#xff0c;连接中国容器技术社区&#xff0c;推动容器技术以及开源在…

office 高效办公智慧树_干货高效实用的office办公小技巧之word篇

对于office三剑客ppt、Word、Excel的使用成了日常&#xff0c;作为办公党&#xff0c;今天就拿出自己在平时工作之中发现、学到的小技巧来做个总结&#xff0c;分享给大家。相信很多大神对于这些小技巧都已经精通&#xff0c;所以lz会先列出目录&#xff0c;大家可以自行依据目…

POJ 1904 【强连通分量】.cpp

题意&#xff1a; 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明了哪个王子将迎娶哪个邻国的公主.. 但是调皮的国王不太满意~~ 他还想知道…

电梯里为什么放镜子?90%的人都不知道

全世界只有3.14 % 的人关注了爆炸吧知识随着高层建筑不断的拔地而起我们每天可能会上下十几层的高楼人们当然不想去爬楼梯所以电梯已成为生活中必不可少的一部分▼我们几乎每天都会坐电梯上班时、回家时、逛街时当我们每走进电梯时第一动作都会干什么呢大概都会先看自己的妆容再…

WPF中的命令(Command)

这节来讲一下WPF中的命令(Command)的使用。【认识Command】我们之前说过&#xff0c;WPF本身就为我们提供了一个基础的MVVM框架&#xff0c;本节要讲的命令就是其中一环&#xff0c;通过在ViewModel中声明命令&#xff0c;从View中使用Binding绑定命令&#xff0c;就能实现从Vi…

PHP中 对象自动调用的方法:__set()、__get()、__tostring()

总结&#xff1a; &#xff08;1&#xff09;__get($property_name)&#xff1a;获取私有属性$name值时&#xff0c;此对象会自动调用该方法&#xff0c;将属性name值传给参数$property_name&#xff0c;通过这个方法的内部 执行&#xff0c;返回我们传入 的私有属性的值。 &am…

xhprof php性能分析工具

先安装libpng*下载安装xhprofwget http://pecl.php.net/get/xhprof-0.9.2.tgztar zxf xhprof-0.9.2.tgzcd xhprof-0.9.2cp -r xhprof_html xhprof_lib cd extensionphpize./configuremakemake install编辑php.ini[xhprof]extensionxhprof.so;; directory used by default imple…

matlab中给图像加几个矩形框_没想到!PPT中的这个效果,用好了,简直就是渣图美化器...

相信大家一定看到过&#xff0c;透过磨砂玻璃呈现在眼前的景色&#xff0c;是不是有种朦胧美&#xff1f;其实&#xff0c;在PPT中你也可以复刻出这样的效果。例如&#xff0c;这样的PPT页面&#xff1a;把背景虚化掉&#xff0c;更加突出主题。你想知道PPT中的磨砂效果&#x…

【转贴】mysql导入数据load data infile用法

mysql导入数据load data infile用法 基本语法&#xff1a;load data [low_priority] [local] infile file_name txt [replace | ignore]into table tbl_name[fields[terminated byt][OPTIONALLY] enclosed by ][escaped by\ ]][lines terminated byn][ignore number lines][(co…

宝贝,我帮你清了购物车哦!

1 一场意外让本不富裕的女朋友雪上加霜甚至还回复了单身▼2 外甥女去参加舅舅的婚礼发现账本上没有她的名字于是写上自己的名字并随了兜里所有的钱人情世故整的明明白白▼3 我感觉再多吹几首他们就能复合......▼4 在家隔离第N天果然天下沙雕是一家▼5 我猜中了开头但没猜…

Dapr牵手.NET学习笔记:Actor小试

Actor模型是一种避免线程共享数据&#xff0c;相同Actor实体串行化的方案&#xff0c;所以不便dapr的其他功能&#xff0c;几乎都是非编程入侵的&#xff0c;相反&#xff0c;Dapr Acror深度定制的&#xff0c;关于Actor&#xff0c;.net中有一些通用框架&#xff0c;比如Akka.…

认识Linux下的各种系统服务

只要是linux系统、不管什么发行版本&#xff0c;都有以下的系统服务。本文将对这些服务逐一进行说明。推荐花一些时间来了解这些服务的作用&#xff0c;以便清楚的知道自己该使用哪些服务。 NetworkManager, NetworkManagerDispatcherNetworkManager是一个后台服务程序&#xf…

黄聪:wordpress如何开启文章格式post format

发现很多“古老”的WordPress主题使用量非常大&#xff0c;虽然部分也在随着WordPress版本的升级而“升级”&#xff0c;只不过是修复了bug而已&#xff0c;wordpress的新特性并没有使用。而且多数国内的wordpress主题制作者&#xff0c;也都是在这些主题的基础上进行创作&…

11没有源码注释_我们为什么要看源码、应该如何看源码?

看源码的意义看源码只是一种方法、手段&#xff0c;而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标&#xff0c;现在看起来真的很蠢&#xff0c;一点不smart&#xff08;specific、measurable、attainable、relevant、time-bound&#xff09;。只有搞清楚了阅读代码的…

如果你没空读书,就一定要来看看这8个公众号!

全世界只有3.14 % 的人关注了爆炸吧知识不管世界变化多块&#xff0c;阅读仍是个不过时的动作。今天就为大家推荐几个优质公众号&#xff0c;从社会热点、读书成长、生活新知&#xff0c;你的碎片化时间&#xff0c;我们包了&#xff01;一起来看看呀~♥长按二维码&#xff0c;…

03Prism WPF 入门实战 - Region

1.概要源码及PPT地址&#xff1a;https://github.com/JusterZhu/wemail视频地址&#xff1a;https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopyweb&#xff08;1&#xff09;Prism概览Application&#xff1a;我们开发应用程序&#xff0c;初始化Bootstrapper。Bo…

CentOS利用crontab执行计划任务

walker的需求是每天1点钟的时候&#xff0c;执行一个shell脚本&#xff0c;下面记录walker用到的基本功能。1、安装yum install crontabs2、服务相关/sbin/service crond status #查看任务状态 /sbin/service crond start #启动服务 /sbin/service crond stop …