伪静态实现(jsp)

 

什么是伪静态

顾名思义, 伪静态是相对真实静态来讲的.
通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面.都将文章内容生成静态页面.
但是有的朋友为了实时的显示一些信息.或者还想运用动态脚本解决一些问题.不能用静态的方式来展示网站内容.
但是这就损失了对搜索引擎的友好面.怎么样在两者之间找个中间方法呢,这就产生了伪静态技术.
就是展示出来的是以.html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的.
我的一个思路是用IIS的404错误处理机制来实现的.这个比rewrite技术要灵活得多.
首先,设置站点属性-自定意错误
找到HTTP错误404,然后编辑属性->消息类型选中URL->URL填入“/index.asp”,或您的错误处理页面.
这样,比如用户或蜘蛛访问 web  时(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了.

这样.用户或蜘蛛看到的URL还是他访问的URL.而我们对内容的处理上可以用到了动态技术.这就是我们想要的结果.
说得简单了一些.但是基本思路就是这样了.

什么是伪静态?如何设置伪静态? 来源:中正网络科技  发布日期:2008-10-18 浏览次数:4834 什么是伪静态?如何设置伪静态?
  动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。

  伪静态的生成的2种方式:
  1.框架型,这种是非常简单而且也是非常便于识别的,它的原理比较简单,就是做一个静态的主框架页面,然后把动态的内容链入副框架内,这个单从它的URL就可以看出眉目,如果整个网站的URL都是一样的,那么就一定是框架伪静态的。

  2.利用组件把asp的后辍显示为htm,这种方法的原理是有一点难度的,它主要是利用一个组件强制性的把asp文件的后辍显示为htm,对于客户来说,它是很难分辨的,因为显示的链接的确是以.htm结尾的,不过如果仔细观察它的链接,也能看出来一些眉目,因为这种URL是很奇怪的,中间带有asp的子样,而且后面还有些参数,不过参数的结果已经被隐藏掉了,但是看到这些就应该保持戒心了;不过,还是有办法找出它的原形,就是看程序文件,去找和URL相同的网页,因为htm的网页都是真实存在的,如果找不到这个网页的话,那它是伪静态化无疑了。

  伪静态的作用?
      1.方便用户访问网站 一个好网页如果是动态的用户在相互传播时感觉对方信任度不会高但一看一个静态页相对用户对网页的信任度就高点而且伪静态的后缀方式基本雷同 一看就知道是伪静态还是真的静态网页!
  2.最主要的就是迎合搜索引擎方便搜索引擎蜘蛛(Spider)来抓取网页上的相关内容!
  3.伪静态对SEO有利嘛?SEO中的伪静态如何定义?!
  我们知道,在SEO优化中,new_1234.html要比new.asp?id=1234更容易收录,一般对于有独立服务器的朋友来说,你就可以使用ISAPI_Rewrite的方式写伪静态规则,而对于只有虚拟空间的朋友,可能你只能使用一些ASP生成HTML的系统来帮助你了。今天重点说一下利用ISAPI_Rewrite构建伪静态。

  第一、首先我们需要下载一个ISAPI_Rewrite,有精简版和完全版,一般精简版只能对服务器全局进行配置,而完整版可以对服务器上的各个网站进行伪静态配置。对于个人站长来说,精简版就足够了。

  第二、下载完成后,可以找到安装包里的.msi的文件,安装即可。
  第三、打开Internet 信息服务,右键,web站点属性,点击ISAPI筛选器选项卡.添加筛选器,这里的名称可以自己随意填写,路径自己指定ISAPI_Rewrite.dll,然后确定.

  下面我们先做一个测试页new.asp,可以按照下面的代码写。然后,在浏览器中输入:  http://127.0.0.1/new.asp?id=1234。接着你就可以在网页上看到一行文字:“1234”  看到这几个数字,就说明你测试成功了。现在我们开始来配置ISAPI_Rewrite :打开ISAPI_Rewrite的目录,把httpd.ini的只读属性去掉,打开编辑。我们现在是需要把new.asp?id=1234修改成类似new_1234.html的路径,因此,我们需要在httpd.ini中添加一句  RewriteRule /new_([0-9,a-z]*).html /new.asp?id={GetProperty(Content)}保存后,我们就可以测试一下这个网址了:http://127.0.0.1/new_1234.html可以看到页面上的“1234”了吧,就这样配置成功了!

 当然,以上只是简单的,根据实际情况,还有目录型的,还有翻页类型等等


 

URLRewirte的用处: 
1.满足搜索引擎的要求 
2.隐藏技术实现,提高网站的移植性 
3.满足美感的要求(个人感觉这个用处太牵强)

项目部署 
1.首先在http://tuckey.org/urlrewirte/下载urlrewirtefilter 
2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下,然后编译 
3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下 
4.在web.xml文件中加入以下: 
Xml代码 
<!-- 动态地址静态化 -->   
<filter>   
<filter-name>UrlRewriteFilter</filter-name>   
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>   
<init-param>   
    <param-name>logLevel</param-name>   
    <param-value>WARN</param-value>   
</init-param>   
</filter>   
<filter-mapping>   
<filter-name>UrlRewriteFilter</filter-name>   
<url-pattern>/*</url-pattern>   
</filter-mapping>   
<!-- 动态地址静态化 -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
    <param-name>logLevel</param-name>
    <param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.需要配置urlrewrite.xml文件来实现url静态化,下面将详细说明

到这里相关的配置已经完成,下面看如何把动态地址静态化 
1.普通url静态化 
例如:要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html 
这种是最简单的,当一个servlet跳转到list.jsp页面列出user列表时,在urlrewrite.xml中这样配置:

Xml代码 
<rule>   
<from>^/user/list.html</from>   
<to>/user/list.jsp</to>   
</rule>   
<rule>
<from>^/user/list.html</from>
<to>/user/list.jsp</to>
</rule>
当请求/user/list.html这个页面时,实际上相当于请求/user/list.jsp页面 
在servlet的跳转要这样写: 
response.sendRedirect("./user/list.html"); 
2.带参数的url静态化 
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换成 
       http://localhost/prjtest/user/view/1_admin.html 
在urlrewrite.xml中这样配置:

Xml代码 
<rule>   
<from>^/user/view/([0-9]+)_([a-z]+).html$</from>   
<to>/user/view.jsp?cid=$1&cname=$2</to>   
</rule>   
<rule>
<from>^/user/view/([0-9]+)_([a-z]+).html$</from>
<to>/user/view.jsp?cid=$1&cname=$2</to>
</rule>
当请求/user/view/1_admin.html这个页面时,实际上相当于请求/user/list.jsp?cid=1&cname=admin页面 
在servlet的跳转要这样写(cid,cname为变量): 
response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html"); 
注意:配置文件中用"&"来代替"&" 
一个通用的正则表达式:[a-zA-Z0-9]+