是不是网站所有页面都做成伪静态页面最好?求大神指点。。。

ASP.NET实现伪静态网页方法小结
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了ASP.NET实现伪静态网页方法小结,主要包括了利用Httphandler实现URL重写、地址重写、利用Mircosoft URLRewriter.dll实现页面伪静态等,需要的朋友可以参考下
本文实例总结了ASP.NET实现伪静态网页方法,分享给大家供大家参考之用。具体方法如下:
方法一:利用Httphandler实现URL重写(伪URL及伪静态)
我们有时候会见到这样的地址:“/show-12-34.html”,你或许认为在站点服务器根目录“/”下存在名为“show-12-34.html”的文件,其实实际它可能是不存在的,而可能你看到的内容是“/aspx/show.aspx?type= 12&id=34”的内容,为什么要这样做呢?原因有多个方面:首先是增强URL的友好性,记“show-12-34.html”总比 “/aspx/show.aspx?type=12&id=34”好记吧?其次就是方便搜索引擎收录,很多搜索引擎更看好静态HTML页,比如:百度;其次就是出于安全性的考虑,因为这样隐藏了参数“type”、“id”。是不是很有意思呢?
其实这是利用URL重写实现的,下面我就说一下在ASP.NET2.0下我所知道的最简单的实现方法:通过实现接口“IHttpHandler”来接管HTTP请求,Follow me!
1.在资源管理方案中添加一个类,类的代码如下:
//类URLRewriter程序清单:
using System.D
using System.C
using System.W
using System.Web.S
using System.Web.UI;
using System.Web.UI.WebC
using System.Web.UI.WebControls.WebP
using System.Web.UI.HtmlC
/// &summary&
/// UrlRewriter URL重写类
/// Author:yoyo
/// &/summary&
public class UrlRewriter : IHttpHandler //实现“IHttpHandler”接口
public UrlRewriter()
// TODO: 在此处添加构造函数逻辑
public void ProcessRequest(HttpContext Context)
//取得原始URL屏蔽掉参数
string Url = Context.Request.RawU
//建立正则表达式
System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex
(@"/show-(\d+)-(\d+)\..+",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
//用正则表达式进行匹配
System.Text.RegularExpressions.Match m = Reg.Match(Url,Url.LastIndexOf("/"));//从最后一个“/”开始匹配
if (m.Success)//匹配成功
String RealPath = @"~/aspx/show.aspx?type=" + m.Groups[1] + "&id=" + m.Groups[2];
//Context.Response.Write(RealPath);
//Context.RewritePath(RealPath);//(RewritePath 用在无 Cookie 会话状态中。)
Context.Server.Execute(RealPath);
Context.Response.Redirect(Context.Request.Url.ToString());
Context.Response.Redirect(Context.Request.Url.ToString());
/// &summary&
/// 实现“IHttpHandler”接口所必须的成员
/// &/summary&
/// &value&&/value&
/// Author:yoyo
public bool IsReusable
2.在web.config文件还要添加以下设置项
在&system.web&节点下添加如下代码:
&httpHandlers&&
&add verb="*" path="*/show-?*-?*.aspx" type="UrlRewriter" /&&
&/httpHandlers&
解释一下:
verb是指允许的动作“GET”、“POST”、“PUT”中的一种或几种,星号“*”表示全部允许;
path是指匹配路径,支持简单的通配符;
type是指绑定的类名以及包括命名空间(如果有的话);
对了,首先你要建立一个WEB窗体“show.aspx”在目录“aspx”下,因为这个文件就是实际接受请求并显示相关内容的页面。
OK!,编译,打开网站输入地址http://localhost:80/show-12-34.aspx 访问一下,检查看是不是显示的“/aspx/show.aspx?type=12&id=34”的内容呢?!
上面我是设置了匹配ASPX文件,因为IIS里.HTML扩展名默认是不归ASP.NET接管的,如果要接管HTML请求,
请将IIS的扩展名.HTML映射到“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”,
然后将上面的aspx改成html:
&httpHandlers&&
&add verb="*" path="*/show-?*-?*.html" type="UrlRewriter" /&&
&/httpHandlers&
现在打开网站输入地址http://localhost:80/show-12-34.html 访问一下~!
方法二:地址重写、使用伪静态、页面回发处理
制作网站页面的时候,有时候为了用户的体验和搜索引擎的收录,很多网站经常使用伪静态地址重写,或者称为 URL地址重写的办法,来将诸如:MyEbook.aspx?ID=1,MyEbook.aspx?ID=2MyEbook.aspx?ID=3等带有参 数的动态页面伪装成为一个静态页面,比如,将以上的伪装成为My1.html,My2.html,My3.html等等诸如此类!
出发点是很好的,不仅有利于用户体验,也有利于收录,实在是一举两得!
好处已讲,现在来谈谈使用这种办法所存在的毛病,问题就在于,当你使用伪静态技术的页面有按钮,需要提交内容时,这个时候,一旦与服务器之间有回发动作, 那么,地址栏里面显示的网页地址就不再是伪装出来的My1.html,My2.html,My3.html等等拉,而是变为MyEbook.aspx? ID=1,MyEbook.aspx?ID=2MyEbook.aspx?ID=3等等洛,如此一来,会让不太懂网页制作的网友感到不安,他们会认为自己 在上一个骗子网站,认为自己提交的数据都被另外一个网站给偷走了,总之,给他们的感觉就是,这样的网站具有欺骗性质;很可能,以后他们再也不敢上你的网站 了!!!………
下面本人就个人解决如上问题的心得体会做如下说明,希望能够帮助广大网友解决问题!
解决如上问题,有很多种办法,有使用Javascript禁止回发,有将页面的
改为等等多种方法,反正能改的地方,都有人使用过了,并且,这样的文章比较多,但是难以实现,就本人脾气而已,更喜欢直接了当的办法,尽量少改地方,免得日后出错麻烦;
第一步:打开你的网站下面,新建一个类,文件名称大体如此:MyActionlessform.cs
第二步:该类的代码如下:
using System.IO;
using System.W
using System.Web.UI;
namespace MyURL
public class MyOLPage : Page
public MyOLPage()
protected override void Render(HtmlTextWriter writer)
if (writer is System.Web.UI.Html32TextWriter)
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
base.Render(writer);
internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
private string _ // 伪装的URL
internal FormFixerHtml32TextWriter(TextWriter writer)
: base(writer)
_url = HttpContext.Current.Request.RawU
public override void WriteAttribute(string name, string value, bool encode)
if (_url != null && pare(name, "action", true) == 0)
base.WriteAttribute(name, value, encode);
internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
private string _
internal FormFixerHtmlTextWriter(TextWriter writer)
: base(writer)
_url = HttpContext.Current.Request.RawU
public override void WriteAttribute(string name, string value, bool encode)
if (_url != null && pare(name, "action", true) == 0)
base.WriteAttribute(name, value, encode);
之后,将这个类文件编译成为MyActionlessform.dll文件,并在网站的项目中引用他,
第三步:打开具有回发操作的页面,将其中的:System.Web.UI.Page更改为: MyURL.MyOLPage,如此而已,一劳永逸了,以后不再担心回发暴露真实地址吓走网友拉!
至此,大功可成一半多一点,接下来问题又来了,什么问题呢,你运行一下你的网站,是不是出现如下错误呀!
CS0433: 类型“MyURL.MyOLPage”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ Temporary ASP.NET Files\schoolit\3266aab1\aca2fc74\App_Code.2-69spm5.dll”和“c:\WINDOWS\ Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\schoolit\3266aab1\aca2fc74\assembly\dl3\4d107fc6\00b753fe_ea19c801\ MyActionlessform.DLL”中
大体就是这样的错误了,针对这样的错误,有很多解决办法,有的地方说,删除临时使用的文件夹,删除某个命名 空间等等操作,俺都试过了,但是百试不得其果,后来俺就自己想想,出现这样的错误无非就是两个文件同时存在,但是又不能重复使用,解决办法那还不简单,停 用一个,只使用一个就行了嘛
上面的,我们不是建立了一个MyActionlessform.cs了吗,它存在App_Code这个文件夹里面,另外一个是 MyActionlessform.dll,两个文件内容完全一样,做好了,我们就不需要MyActionlessform.cs了,我们只需要 MyActionlessform.dll,那么,想方设法将前者弄走不就得了(本人建议将此文件排除项目,不提倡直接删除该文件,因为以后可能使用 到),本人做法是,在项目中直接排出MyActionlessform.cs文件,经过测试,大功至此已结束!!!!
方法三:利用Mircosoft URLRewriter.dll实现页面伪静态
昨天,转贴了一篇利用ISAPI筛选器来实现URL伪静态的文章,我按照文章上的内容做,可是没有做出来,目前看来,该方法没有使用Microsoft URLRewriter.dll这个方法好,至少我个人觉得,花了一个晚上的时间,终于研究出来了怎么利用这个dll文件来对asp.net页面实现静态 化了,其实很简单。
一、获得Mircosoft URLRewriter.dll:
获得Mircosoft URLRewriter.dll可以到/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true
这里,选择[下载本文的源代码],下载完毕后,导入工程,我这里没有对该工程做任何修改,保留了原来的重写方式,然后直接在VS2005里面生成.dll文件就可以了。
二、使用该dll文件:
添加引用,搞定。
三、页面方面的设计,这里不在赘述了,我会放一个下载包,有兴趣的朋友下载来看看吧,代码写的比较乱。
四、web.config的配置
这部是非常关键的,也是静态化能否成功的关键。
&?xml version="1.0"?&
&configuration&
&configSections&
§ion name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /&
&/configSections&
&RewriterConfig&
&RewriterRule&
&LookFor&~/web/new/type/(.[0-9]*)\.html&/LookFor&
&SendTo&~/web/new.aspx?id=$1&/SendTo&
&/RewriterRule&
&RewriterRule&
&LookFor&~/web/index.html&/LookFor&
&SendTo&~/web/index.aspx&/SendTo&
&/RewriterRule&
&/RewriterConfig&
&system.web&
&httpHandlers&
&add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /&
&add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /&
&/httpHandlers&
&compilation debug="true"/&&/system.web&
&/configuration&
这里简单介绍一下:
&RewriterConfig&
&RewriterRule&
&LookFor&要查找的模式&/LookFor&
&SendTo&要用来替换模式的字符串&/SendTo&
&/RewriterRule&
&RewriterRule&
&LookFor&要查找的模式&/LookFor&
&SendTo&要用来替换模式的字符串&/SendTo&
&/RewriterRule&
&/RewriterConfig&
httpHandlers的设置主要是配合IIS将请求重新定义处理,这里也比较关键,如果不存在合理的httpHandlers,那么,访问肯定会失败的。
关于正则表达式,可以到百度里搜索:"常用正则表达式",会有很多。
五.配置IIS解析.html文件
右键点我的电脑--&管理--&展开'服务和应用程序'--&internet信息服务--&找到你共享的目录--&右键 点击属性 --&点击'配置'--&映射下面 --&找到.aspx的可执行文件路径 复制路径--&粘贴路径--&扩展名为".html"--&然后把检查文件是否存在的勾去掉这样就可以了,如果遇到“确定”按钮失效, 可以用键盘事件编辑路径即可解决。
本文实例代码点此。
相信本文所述对大家的asp.net程序设计有一定的借鉴价值。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具无忧主机讨论网站是否有必要做全站伪静态? - 无忧主机
自始至终,以提供稳定、高性能的美国、香港免备案php虚拟主机产品为己任,以用户极高满意为生存价值,以产品的可靠性为生命线,以网络零中断为终身奋斗目标
动态网站的伪静态技术的应用在php开源网站中的应用是非常普遍的,无忧主机()小编我所知了解的php开源代码多包含伪静态功能,无“伪”不成站。许多优秀的开源程序,不需要我们自己去编写复杂的伪静态正则表达式,所以站点实现伪静态是非常方便的和简单的,按照官方文档说明就可以完成,更有的开源程序,只需要在网站后台配置后,就会自动生成.htaccess伪静态规则(如wordpress伪静态的配置)。
将网站静态化,站长们都是奔着“伪静态对利用seo优化”,有些站长们就想了“咿!把动态网站全站伪静态不是很好吗?”站长们使用利用官方提供的.htaccess伪静态规则配置站点伪静态化后,一般只对内容页、栏目、标签等局部的伪静态,不是将整个动态网站完全静态化(将所有的动态页面全部伪静态)。现在问题就来了?很多站长不甘心,都在苦苦追求将网站全站静态化的方法(如disucz x2全站伪静态,dedecms全站伪静态等),但多数站长对伪静态正则表达式规则、语法又不精通。现在,问题就来了,是否有必要全站静态化吗?
无忧主机()认为,没有必要对站点全站静态化(伪静态),只需要对网站内容、栏目、标签等关键部分静态化就足够了,这些已经足够了,程序官方提供的伪静态规则也是基于这个方向去的,我们在使用伪静态的时候,是需要占用cpu的,大量的伪静态使用会超出cpu负荷过载,在或服务器中为考虑一个平衡,只需要局部静态化页面就可以了,从而实现双赢的局面。大家,抓破了脑袋想如何全站静态化站点,还不如把精力投入现有的.htaccess规则中去,修改官方提供的规则使用url输出更加简洁,个性,我想蜘蛛会更加喜欢的。
纯Linux环境下高端免备案[香港独立IP地址] ,仅仅只需199元一年起。商务中国域名核心代理直销50元注册国际顶级域名
本文地址:/others/5516.html
喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
无忧主机资质:(十三年旗舰品牌)
相关技术帮助文档
技术帮助文档分类

参考资料

 

随机推荐