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

UrlRewrite(Url重写技术)相关推荐

  1. java urlrewriter_java url重写技术(UrlReWriter)

    现在url重写技术用的越来越广泛了,很高兴今天和各位网友分享一下: 首先我们要从网上下一个UrlReWriter jar包 现在地址进不了,我这里有一个3.0版本的,文章底有下载地址,大家可以去下载 ...

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

    核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有 ...

  3. 14.URL重写技术

    当用户不接受Cookie时,可以使用URL重写机制跟踪用户会话.URL重写技术会在URL请求中嵌入标识客户的SessionID,使用Servlet容器解释URL并取出SessionID. //用于自动 ...

  4. UrlRewrite(URL重写)--ASP.NET中的实现

    概述 今天看了下URL重写的实现,主要看的是MS 的URL Rewrite. URL重写的优点有:更友好的URL,支持老版本的URL URL重写的缺点有:最主要的缺点是性能低下,因为如果要支持无后缀的 ...

  5. java urlrewrite_Java|urlrewrite|URL重写|多个参数

    1.0  web -info 目录下建立     urlrewrite.xml  文件 类似如下: View Source for full doctype...)> - - ^/morednf ...

  6. IIS URLReWrite URL 重写模块 下载地址

    https://www.microsoft.com/zh-cn/download/details.aspx?id=7435 转载于:https://www.cnblogs.com/fuqiang88/ ...

  7. 《转》java URL重写

    文章来源:http://www.it300.com/article-5319.html  现在url重写技术用的越来越广泛了,很高兴今天和各位网友分享一下: 首先我们要从网上下一个UrlReWrite ...

  8. 在ASP.NET中重写URL 方法三:在IIS7中使用HttpModule 实现无扩展名的URL重写

    上述的HttpModule方法在你要重写的URL含有.aspx 扩展名或者包含另一个被设置为ASP.NET处理的扩展名的情形下一切都工作.你这么做的话,不需要任何特定的服务器配置,你只要把你的应用拷贝 ...

  9. 关于URL重写的一点心得

    最近在做电子签核系统,签准用户会收到邮件,里面有个链接地址,直接点击进入相关操作. 系统已经完成,后来发现里面的URL地址很不友好,ID,TYPE什么的,于是就考虑使用URL重写技术.URL重写有好多 ...

最新文章

  1. xp http文件服务器,在XP sp3下用IIS搭建http服务器总结
  2. 让Python不在mac的dock上显示火箭图标
  3. TensorFlow-Bitcoin-Robot:Tensorflow 比特币交易机器人
  4. 文件html怎么另存为wps,WPS文字中另存为功能详解(wps文字怎么保存到指定文件夹)...
  5. linux 升级centos7,Linux之从Centos 6.x 升级Centos7
  6. HEVC码率控制介绍(R-Lamda)
  7. eclipse如何创建web项目
  8. android工具栏设为底层,Android 隐藏底部工具栏
  9. [转] 由Request Method:OPTIONS初窥CORS
  10. RS422-RS485-RS232标准接线
  11. 华为鸿蒙系统支持什么手机_华为鸿蒙系统支持的手机型号_鸿蒙系统支持华为哪几款手机...
  12. 颜色模型和颜色应用---CMY和CMYK颜色模型
  13. 深入理解Amazon Alexa Skill(三)
  14. ROSNOTE :Twist /cmd_vel (速度、调试)
  15. Failed to introspect Class FeignClientFactoryBean 异常排查
  16. 20140309_博瑞学习
  17. 瓴羊DAAS闪耀云栖大会,发布数字化时代最优解
  18. 无法安装驱动程序 此计算机上不存在英特尔适配器,win10系统提示无法安装驱动程序,此计算机中没有Intel适配器怎么办...
  19. 如何完整的修改一个数据库的名称
  20. 中兴二面(综合面试及口语测评)

热门文章

  1. 利用局域网性能测试仪保障企业网络环境
  2. php获取网络文件的几种方式,PHP如何实现获取网络上的文件?
  3. 操作系统:再见CentOS,将于本月底终止维护!
  4. 电脑技巧:键盘失灵怎么办?
  5. 收集一些优秀的DoNet开源项目
  6. 基本系统设备感叹号_win7系统网络图标显示感叹号的问题
  7. treelist自动定位行_国内首创!金川集团千米深井双定位补偿摇台投用
  8. android studio 工程demo例子,Android Studio 实现跑马灯微项目实例
  9. oracle數據庫any,Oracle权限集合全集
  10. 大学慕课数据结构单元测试——华中科技大学