当前位置: 首页 > news >正文

伪静态技术说明

伪静态技术产生的背景:
1、静态网页与动态比较:
  1)静态网页:
    优势:A、 对搜索引擎友好,被收录的质量高;B、访问速度快;C、资源(cpu 等)占用少。
    劣势:A、对于大型门户,或者社区来说,不断的修改将会产生大量I/O,会导致磁盘出现碎片甚至出现磁盘坏道。相当恐怖一个隐患。用户信息一旦没有了就没戏玩了。B、储存空间占用会多一些。
  2)动态网页:
    优势:相对于静态,它的劣势也就是动态的优势所在——占用空间少,对硬盘友好。
    劣势:A、对搜索引擎不友好。搜索引擎会不收录带问号的网址?因为搜索引擎怕由于问号而进入死循环。
B、高并发时资源占用较多。

而伪静态就是在这样背景下应运而生了,它在保留动态的优点的基础上,使得网址静态化,也就是让网址里不带问号,骗过收录的爬虫就行了。这样完美地糅合了前边两者的优点。
优点:静态的优点+动态的优点
不足:流量稍大一些使用伪静态就出现CPU使用超负荷,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病.

实现机制:是利用服务器端,对请求的动态页面做改动,让浏览器认为访问的也是静态页面,这个时候,浏览器地址栏中显示的就是静态地址信息(不带问号)了。

两种实现方法:
1、使用ISAPI_Rewrite进行动态链接重写HTML静态网址。ISAPI_Rewrite是一个dll组件,re_write是iis里的一个模块。这个筛选器实现是通过正则表达式,将动态网页网址映射成为静态网址。如可将news.asp?id=95通过re_write将其转换成news/95.html。映射的正则表达式在httpd.ini文件里进行设置。
  举个小小例:处理数据翻页,那么写法是:
More_<%=Page%>_<%=type%>.html (注:page是翻页页数,type是数据类型)表现形式:More_1_95.html
如果翻下一页,则为:More_2_95.html,继续下一页的循环,则是:
More_3_95.html,以此类推。
不过你需要在httpd.ini文件中增加以下代码:
RewriteRule /More_("d+)_("d+)".html /jsp/more".asp"?page=$1&type=$2 [N,I] 字串9
如果你的动态程序有多个参数需要传递,那么就增加多个("d+)即可,如下:
RewriteRule /More_("d+)_("d+)_("d+)".html /asp/more".asp"?page=$1&type=$2&type2=$3 [N,I]

优点:在程序上基本不需做什么变化。麻烦:要实现这个需要对iis进行控制,所以当你租用别人的服务器时,则需要先跟服务商联系。(当然这个是对asp而言,asp.net就不用——直接将dll程序集放到程序中的bin再适当的配置即可实现)

2、IIS的404错误处理机制:通过自定义错误,转向我们准备好的处理页。不过这种可拓展性有待研究,对程序处理的统筹要求也高,不大适合实际应用的样子。

首先,设置站点属性-自定意错误
找到HTTP错误404,然后编辑属性->消息类型选中URL->URL填入“/index.asp”,或您的错误处理页面.
这样,比如访问http://www.gz909.cn/12345.html  时(12345为文章在数据库的ID).由于些页面不存在,所以触发了404错误.转向了index.asp
在index.asp里加
CurrDomain=Request.ServerVariables("HTTP_HOST") '当前访问域名
CurrURL=Replace(Request.ServerVariables("QUERY_STRING"),"404;http://"&CurrDomain&":80","")  '当前访问URL
此时的CurrURL应该是:12345.html .
这样,就得到用户正在试图访问的页面.然后提取里边的文章ID(应该为:12345),用正则,这里就不多说了.
然后到数据库里提取出文章内容.输出到页面里,就OK了.

结论:伪静态适合用在普通的企业网站上了——既不要求高并发,但同时又很在乎seo(搜索引擎优化),而且也要求后台可动态更新。——当然实现直接生成静态页也行,因为这种不像社区那种修改量那么大。

转载于:https://www.cnblogs.com/chenlong/archive/2009/10/26/1589984.html

相关文章:

  • Java中Model1和Model2
  • config jre for openoffice3.0
  • 2017敏捷沙滩大会概述:学习、心理安全和持续交付的重要性
  • 简洁的一键SSH脚本
  • Page-Enter、Page-Exit的使用
  • 很认真的聊一聊程序员的自我修养(转)
  • ERP系统各种单据流水号的产生方案
  • WebSocket在spring messagemapping下获取httpsession
  • 图片的动画 ease.js
  • [翻译].net 2.0(c#)下简单的FTP应用程序(转)
  • Python Unicode 转换 字符串
  • java中关于、、|、||之间的区别和运算
  • 生成静态页面的方法
  • 项目质量量化考核建议
  • Linux命令(磁盘的卸载与挂载)
  • [译]CSS 居中(Center)方法大合集
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • angular学习第一篇-----环境搭建
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java基本数据类型之Number
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Netty源码解析1-Buffer
  • Promise初体验
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python进阶细节
  • spring + angular 实现导出excel
  • SwizzleMethod 黑魔法
  • Tornado学习笔记(1)
  • 对超线程几个不同角度的解释
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 利用jquery编写加法运算验证码
  • 前端攻城师
  • 微信小程序:实现悬浮返回和分享按钮
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (09)Hive——CTE 公共表达式
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十一)手动添加用户和文件的特殊权限
  • (转)关于pipe()的详细解析
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .Net 知识杂记
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET构架之我见
  • .NET开发不可不知、不可不用的辅助类(一)
  • .Net中ListT 泛型转成DataTable、DataSet
  • .Net中间语言BeforeFieldInit
  • //解决validator验证插件多个name相同只验证第一的问题
  • @Query中countQuery的介绍
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解