利用URLRewriter.dll 实现ASP.NET实现伪静态

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

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

首先、我们要用到URL重写组件:URLRewriter.rar

其次、需要在WEB.CONFIG里面进行些设置:

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

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

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

<configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>

<RewriterConfig>
    <Rules>
      <RewriterRule>
        <LookFor>~/d(\d+)\.html</LookFor>
        <SendTo>~/Default.aspx?MyID=$1</SendTo>
      </RewriterRule>
    </Rules>
  </RewriterConfig>

设置完以上两个步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。

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

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

4、以上配置好之后就可以通过以下方式来访问了

例如用户输入 hostname/d11.html,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输入http://hostname/d11.html,实际访问的是http://hostname/default.aspx?id=11

5、分页必须引用以下方法

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就可以帮你实现,并且这一切不需要多少的代码。

利用URLRewriter.dll 实现ASP.NET实现伪静态

时间: 2024-10-10 13:24:01

利用URLRewriter.dll 实现ASP.NET实现伪静态的相关文章

Asp.Net实现伪静态(通过URLRewriter)

一.起因 最近一个项目要实现伪静态,之前没接触过,故一切从零开始,开始网上查资料,方法大概有三种,但是我都试了好几个,都失败了.望有建议的博友给点建议,这里我实现了一种方式,是通过微软URLRewriter.dll实现的,觉得不错,故记录下来,大家一起学习,话不多说,上代码. 效果截图: 二.配置web.config 首先,新建项目.添加一个页面Default.aspx,用于测试.去下一个URLRewriter.dll,链接: https://pan.baidu.com/s/1hs3YNZm 密

ASP.NET 实现伪静态网页方法

方法一:利用Httphandler实现URL重写(伪URL及伪静态) 我们有时候会见到这样的地址:“http://www.huoho.com/show-12-34.html”,你或许认为在站点服务器根目录“/”下存在名为“show-12-34.html”的文件,其实实际它可能是不存在的,而可能你看到的内容是“/aspx/show.aspx?type= 12&id=34”的内容,为什么要这样做呢?原因有多个方面:首先是增强URL的友好性,记“show-12-34.html”总比 “/aspx/sh

ASP.NET URL伪静态重写实现方法

ASP.NET URL伪静态重写实现方法 首先说下,ASP.NET URL伪静态只是将~/a_1.html指向到了~/a.aspx?ID=1,但a.aspx还是真实存在的,你不用./a_1.html来访问,用./aaa.aspx?ID=1也是可以访问的,伪静态并会真的把你的a.aspx变为a.html 在web.config里设置如下: <?xml version="1.0" encoding="utf-8" ?> <!--overred-->

.NET4.0下web应用程序用UrlRewriter.dll重写无后缀路径

示例环境:VS2010 要求: 重写前:http://localhost:13275/Default.aspx?username=wilson 重写后:http://localhost:13275/wilson 第一步:下载相关DLL(ActionlessForm.dll和UrlRewriter.dll) 下载链接一: http://download.csdn.net/detail/porschev/3704868 下载链接二:   http://files.cnblogs.com/zhongw

【转载】 asp.net网站伪静态化

第一步:引用一个dll Intelligencia.UrlRewriter.dll(不同的dll可能方法有些不同) 第二步:在web.config中配置使用伪静态 <configSections>(在configuration节点下) <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.Rewrit

微软URLRewriter.dll的url重写在目标框架.Net Framework2.0、4.0和应用程序池经典模式、集成模式下的配置

大家参考几篇园子里面的这篇文章: 文章1:微软URLRewriter.dll的url重写的简单使用 (讲解了使用UrlReWriter.dll的下载.web.config如何在目标框架2.0应用程序池经典模式下配置使用该dll.还有一个web的例子.缺少处理程序映射的设置例子) 文章2:使用web.config中的httpHandlers (讲解了URLRewriter.dll是如何从原理上来处理URL重写地址来转发给真实的服务器地址上的) 文章3:检测到在集成的托管管道模式下不适用的ASP.N

ASP.NET实现伪静态

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Text; 6 using System.Text.RegularExpressions; 7 8 /// <summary> 9 ///UrlRewriter 伪静态Url重写 10 /// </summary> 11 public class UrlRewriter

Asp.net创建伪静态页面

下面是我研究了好几天和同事一起才研究出来的,原创. 1伪静态的定义: 伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息.或者还想运用动态脚本解决一些问题.不能用静态的方式来展示网站内容.但是这就损失了对搜索引擎的友好面.怎么样在两者之间找个中间方法呢,这就产生了伪静态技术.就是展示出来的是以html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的. 2伪静态的实现: 2.1创建URL重写类URLRewiter.c

利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

原文:利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包 因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是64位也可能是32位,所以在打包的时候就需要打包成两份安装包.研究了几天终于有所收获,下边就是打包的步骤. 打包步骤: 一.前期准备 1.将asp.netmvc发布到本地目录中