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

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

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

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

URLRewriter.dll
ActionlessForm.dll

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

http://www.microsoft.com/web/spotlight/urlrewriter/

http://urlrewriter.net/

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><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>
--></configuration>

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

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

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

2、在网站添加App_Browsers文件夹,添加文件Form.browser,跟方法一比起来,可以不用每个页面添加:<%@ Register TagPrefix="RW" Namespace="ActionlessForm" Assembly="ActionlessForm" %> 和改form标签,比较简单

<browsers><browser refID="Default"><controlAdapters><adapter controlType="System.Web.UI.HtmlControls.HtmlForm"adapterType="URLRewriter.Form.FormRewriterControlAdapter" /></controlAdapters></browser>
</browsers>

Demo:urlTest伪静态Demo.rar

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

  1. UrlRewrite(Url重写技术)

    ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置------转载 ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置 核心提示:大家一定经常在网络上看到很多网站的 ...

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

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

  3. 在 ASP.NET 中执行 URL 重写

    在 ASP.NET 中执行 URL 重写 发布日期: 8/23/2004 | 更新日期: 8/23/2004 Scott Mitchell 4GuysFromRolla.com 适用范围: Micro ...

  4. ASP.NET 中执行 URL 重写

    作者:overred   来源:原创 URL 重写就是把URL地址重新改写(汗^_^). 详情:http://www.microsoft.com/china/msdn/library/webservi ...

  5. 配置伪静态(URL重写)

    本篇借鉴了很多文章,这里做个记录. 有时我们的导航栏出现xx.aspx?id=x&name=xx 等等这样,会显得不好看,我们可以利用伪静态来美化我们的导航栏,伪静态的形式可以自己定义,本质还 ...

  6. thinkphp伪静态(url重写)

    1. 服务器开启url_rewrite功能,linux空间的php虚拟主机只需要开启apache的mod_rewriet,如果是iis6.0就要安装ISAPI Rewrite模块,apache只要开启 ...

  7. ASP.NET中获取URL重写前的原始地址

    在ASP.NET中,如果你使用了URL重写,通过HttpContext.Request获取到的是重写后的地址.如果这个地址要返回给客户端(比如Redirect),我们一般希望是重写前的友好地址. 通常 ...

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

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

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

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

最新文章

  1. “AI理论之父应该是哥德尔”,LSTM之父再抛惊人观点,网友:他有点走火入魔...
  2. python中key的意思_有朋友问Python 中实例对象为啥能按照key赋值。
  3. Qt QWidget实现开关控件SwithButton(SlipButton)
  4. java集合基础复习
  5. C语言,去你的策略模式!
  6. jqprintsetup已经安装还会提示_Windows 10更新将修复困扰用户已久的循环安装问题...
  7. mysql延迟复制实现
  8. 【华为云技术分享】ARMv8-A存储模型概述(1)
  9. Linux 字符集 en_us,Linux语言环境:en_US.UTF-8 vs en_US
  10. 《数值分析》学习笔记 ·002——误差知识
  11. Ubuntu 串口权限问题
  12. 极简主义︱使用Turicreate进行快速图像分类迁移训练与预测(六)
  13. 百会:物联网推动CRM创造新型服务
  14. 努比亚红魔play9008救砖教程
  15. 优思学院|精益六西格玛中的8大浪费是什么?
  16. BUUCTF刷题记录(持续更新中~)
  17. 程序虽小但功能强大!5个实用的微信小程序,每款都是生活好帮手
  18. NFC bcm2079x驱动学习
  19. [ffmpeg][vaapi][goav][golang] ffmpeg使用vaapi示例代码(基于goav-incr)
  20. 时间序列预测比赛小结

热门文章

  1. 通过代码生成机制实现强类型编程-CodeSimth版
  2. Google我的商家设定
  3. [译]后台执行UNIX/Linux命令和脚本的五种方法
  4. 关于栈的链式存储结构
  5. Ethercat解析(一)之获取、编译、安装(Ubuntu14.04)
  6. Docker部署Angular应用
  7. Linux less命令:查看文件内容
  8. 【latex】输入角度符号°
  9. 基本数据类型的分类 0125
  10. cutterman工具使用 0921