功能测试

.NET编程如何实现伪静态,为什么要用伪静态?--真静态和伪静态的一些说法

发布-wangzhunzhi | 查看- | 发表时间-2010-05-20

湖北青石板-郭源青石板

这是一篇关于伪静态的文章,是我去年写的,当时还在写代码,给企业做网站,当时这篇文章被很多网友搜索到,然后也都加我QQ以及加入我建的一个技术交流群。最近又碰到一个朋友来咨询我伪静态的问题,于是也就有了把这篇原本不在自己博客上的文章发布在这个独立博客上的想法。以下是当时的原文:
 
最近,自己帮一个同学的老爸用asp.net写了一个企业网站程序,出于SEO技术的考虑,我想把.aspx后缀的页面统一改成.html。这个技术,课本上没有讲到。通过在网络上的搜索和求助,最终于昨晚,解决了这一上周遗留下来的问题。下面特将这一问题的解决办法分享与大家。
注释:本人使用的操作系统是XP专业版本,NET2.0,VS2005,已经过测试,实现了伪静态技术的实现,可以实现诸如Show.aspx?MyID=1成功转换为1.html的转换。
我们为什么不直接使用Show.aspx?MyID=1这种访问方式而非要使用1.html这样的访问方式?
 
我的总结比较简单,这样做有两个优势:
 
1静态页面有利于搜索引擎优化,因为搜索引擎对HTML静态页面优先收录;
2, Show.aspx?MyID=1,这样的页面会容易暴露出你的信息,会让不太懂网页制作的网友感到不安,他们会认为自己在上一个骗子网站,认为自己提交的数据都被另外一个网站给偷走了。
 
不过网上逛seo论坛时发现了一篇更加不错的关于为什么要使用伪静态的文章,其中分析更加精辟:这里就借以说明吧。原文地址:http://www.youhua.cc/html/promotion/2009/01/504.htm
 
1.关于伪静态的用处
  有些用户觉得,伪静态和真静态实际被收录量会相差非常大,其实不然,从你个人角度,你去判断一下一个帖子到底是真静态还是伪静态?
  估计非常难看得出,因为所谓静态的意思,就是地址中不带问号,不带问号的就是静态,管他是真的还是伪的?搜索引擎看得出吗?
  所以说,其实不论是真的还是伪的,其实对于搜索引擎来说都是相同的,搜索引擎没有说,你这个是伪的,我不收录你.
揪根掘底的来说,为什么搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去出不来了),所以非常多时候带问号的地址是不会进去的,伪静态对于搜索引擎来说,其实就是静态,因为地址中没有带问号,所以没有真静态比伪静态收录得多的说法.
2.为什么选择伪静态
  有非常多用户说:
  真静态不好吗?
  为什么不用真静态?
  访问起来不是更快吗?
  负载不是更好吗?
  等等等等...
  在这里,其实只用一个问题来回答:为什么选择MYSQL.
  非常多用户大概不明白为什么那么多大型论坛都选择了MYSQL数据库作为储存机制,大概大部分都是想:"因为DZ用了MYSQL,所以就是MYSQL".
  其实不然,试想DZ为什么会在那么多论坛程式并存的日子生存下来并笑傲江湖,非常大原因是因为DZ用了MYSQL.试想如果大C当年改的程式是个文本论坛,那还会有DZ的今天吗?
  或从另一个角度问,为什么那么多大型网站都选择了MYSQL而不是文本作为储存机制?
  所谓文本论坛,实际就跟真静态的说法差不多了,将数据储存在空间上面,大量读写硬盘,等等...
  为什么这种写法会被淘汰呢?
  我相信答案不会是老师所说的:
  "discuz.net 目前有 2129867 篇帖子,存储成html的话大约是 20799 M,也就是 20G左右。这当中还不计算由于磁盘存储机制造成的空间浪费(100个1k 的文件占用的空间可能会是200K)。"
  这种说法从我个人观点来看,这个理由不能给予用户不使用真静态充分的理由.
  然而,另一个理由却是值得我们注意思考的,也是为什么绝大多数站都不选择生成静态:
  "删除、更新这些html内容会导致大量的磁盘io操作及大量的磁盘碎片."
  正如上面这个说法,在实际当中确实会导致大量的磁盘I/O操作(input,output),大量进行I/O操作带来的后果可想而知,会产生大量的磁盘碎片甚至会导致硬盘出现坏道.
  所以对于生成静态而言,还不如去用文本论坛,能更好的解决你们的需求.
  当然,如果大家记忆力好的话,应该能记得PW4的时候PW论坛不能访问非常长一段时间,后来恢复到一段时间前的数据,官方的说法是被人攻击而导致硬盘损坏,其实这种说法是比较不可信的,相对于是被攻击导致硬盘损坏还是大量I/O操作而产生的后果,我个人更倾向于后者.
  当然,如果大家比较关注5d6d的话,应该知道前几天有一天时间5d6d无法访问,根据非官方消息是因为硬盘坏了,而损坏的原因我想当然是因为大量用户大量进行I/O操作了,试想,我们一个论坛,进行磁盘I/O操作的仅为管理员进行更新缓存时进行的,而5d6d每一个会员就是个管理员,试想下对磁盘是多大的考验?所以我并不奇怪5d6d的硬盘坏了.
  当然,也许在读这篇文章的非常多朋友都有使用过BT,也听说过BT对硬盘非常伤,不能开多,而所谓伤害,和这里指的都是同相同东西,大量I/O导致磁盘出现碎片甚至出现磁盘坏道.
  这里都是说些非常实际的例子来说明问题了.
3.关于伪静态的坏处
  当然犹如一篇文章的作者所说的
  "如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,我的ISS数是1000"
  确实是这样的,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病.
 
最后来将一些.net编程技术:实现伪静态(URL重写)具体的实施步骤:
1,首先要有这个文件URLRewriter.dll,如果没有,赶快到网上下载一个,并将其放到下面的bin目录里面,并且将其引用添加到下面里面(附件提供下载);
2,下面就是Web.Config文件的配置了,当然,配置过程相当简单
------------先添加下面这段代码在配置文件中,但,要注意把这个<configSections> 放到<configuration> 元素的第一个子元素。否则会报错。
<configSections>
  <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>
  <RewriterConfig>
    <Rules>
      <!--
这里是定义重写的角色,可以重写多个-->
      <RewriterRule>
        <LookFor>~/(.[0-9]*)\.html</LookFor>
        <SendTo>~/ArticleDetail.aspx?ID=$1</SendTo>
          </RewriterRule>
    </Rules>
  </RewriterConfig>
-------------然后添加下面这段代码。同时也要注意,一个配置文件中只能有一个<httpHandlers> ,如果你定义了ajax的重写,那么都可以把他们放在一起。
    <httpHandlers>  
      <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
      <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    </httpHandlers>
3,在IIS中找到自己的虚拟目录网站,点属性,然后点配置,然后弹出应用程序配置对话框,选择添加,添加的可执行文件路径为c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,扩展名为.html
 大功可成也,怎么样,很简单吧,赶快试试哦
作者:王准之
原载:.NET编程如何实现伪静态,为什么要用伪静态?--真静态和伪静态的一些说法
来源:http://www.wangzhunzhi.com/post/21.html

百度推广

或许你还对下面的文章感兴趣

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河北博客 不错 收下了!
http://www.kingwq.cn 2010-05-20 13:25:39 【回复】
最新文章
最近评论
访客留言
Copyright 鄂ICP备09017107号 www.wangzhunzhi.com. | DESIGN BY Seanloo.cn