触摸屏租赁
Touch screen rental
广告机租赁
Advertising rental
机器人租赁
Robot leasing
 当前位置:首页 > > ASP伪静态技术(JS版)

ASP伪静态技术(JS版)

一、什么是静态技术?

所谓静态的意思,就是地址中不带问号。

二、为什么要用伪静态技术?

Web应用程序最大的特点之一就是无状态,当一个页面跳转到另一个页面时,那么这个页面上的所有参数

都将抛弃,所以动态页面一般利用url地址来保存其参数,就像:

www.oursn.com/essay.asp?id=1
这样,搜索引擎在录取该页面时,可能会因为问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去

出不来了),所以很多时候带问号的地址是不会进去的,这样便降低了页面的收录效率。

既然这样,那么选用不带问号的url不是可以更好的让搜索引擎收录自己的网页?的确。静态网页的url正好

不带问号,所以我们要伪造静态,目的就是为了SEO,提高网站的收录效率。

三、实现静态的三种方法

1、 重写url参数

参数过多,也不利于搜索引擎收录,故可以通过修改参数实现静态。

先看动态的url地址,当我们点击它时,页面跳转到essay.asp页面的同时,还传递给页面一个参数id=1,然

后我们取得了id的值,再由"select * from article where id="& ID 找到对应的记录。由此可知,整个过程的

关键是取得参数的值,所以,也可以在静态的url包含该参数的值。

又要包含参数的值,又要考虑静态,于是得出一个解决方案,即要实现这样的转换:

www.oursn.com/essay.asp?id=1

www.oursn.com/essay.asp?/1.html

比较两个url的格式,我们仅仅改变动态地址的参数,这种方式叫作重写url参数法。

不过它也存在表面和内在的缺陷。例如,它仍然存在.asp的记号,更重要的是它并没有去掉问号。

2、 ISAPI_Rewrite程序

ISAPI_Rewrite是一个强大的基于正则表达式的url处理引擎。它是专为IIS设计的。ISAPI_Rewrite有两个版

本:ISAPI_Rewrite Full与ISAPI_Rewrite Lite。ISAPI_Rewrite Lite是免费版本,但不支持反向代理功能。

ISAPI_Rewrite Full只能下载到30天的试用版本。

用ISAPI_Rewrite实现asp的静态化,将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎

优化方式。但这种方式不支持虚拟站点。而且对于虚拟主机的站长不太实用或太麻烦。

3、 XMLHttp组件

当我们做好一个asp程序后,如果某个页面长期不做修改,那么我们是不是可以考虑将它生成静态页呢。就

好象有一个leave.asp页面,若这个页面长期不做修改,那么我们可以利用某种方法将它生成一个leave.htm

页面,这种方法就是用XMLHttp组件。

四、伪静态原理

1、 重写url参数

其基本原理和动态url一致,都是截取参数值,只不过url的写法不同罢了。

前台的核心代码:

var id=parseInt(sParam.replace("/","").replace(".html",""));
后台的核心代码:

var sParam=String(Request.ServerVariables("QUERY_STRING"));

var id=parseInt(sParam.replace("/","").replace(".html",""));

2、 ISAPI_Rewrite程序

通过正则表达式重写url地址实现静态,正则表达式在httpd.ini中编辑。其格式为:

RewriteRule /test-([0-9,a-z]*).html /test.asp\?id=$1
RewriteRule是关键词,必须有的,没为什么。

/test-([0-9,a-z]*).html /:两跟正斜杠里编辑想要的静态地址的正则表达式。

test.asp\?id=$1:动态url的原型

这种方式仍然是在通过修改参数的位置实现静态,但和上面提到的修改参数位置不同的是:它的url中不包

含.asp等动态url的特征,而且也没有问号。

3、 XMLHttp组件

用XMLHttp组件实现的静态是真正的静态,因为它生成了真正的html文件,当页面跳转时,首先访问的是

html文件,再访问的是asp文件。

用户点击链接时,首先发送异步请求,返回请求页面的所有内容,包括文本和二进制。然后把这些内容输入

到Stream对象里进行保存,从而生成与动态页面同名的html文件,这样就实现了静态。

五、方法学

最重要,也是最激动人心的时候来了。现在,我将一步一步地拨开这三种方式的神秘面纱,并且实现相应的功能代码……

1、 重写url参数

Step1: 建立前台文件index.asp,修改url参数形式。由于读取数据库中的记录不是专题的重点,故直接给出:

<!--#include file="config.asp" -->

<%

var rs=Server.CreateObject("adodb.recordset");

sql="select * from Article";

rs.open(sql,conn,1,1)

while(!rs.EOF)

{

%>

<div><%=rs("title")%></div>

<%

rs.MoveNext();

}

rs.Close();

rs=null;

%>

Step2:为了达到伪静态的目的,就必须在前台页面加上伪静态的代码。接下来就要修改url的参数形式:

在<%=rs("title")%>两边插入<a href="article.asp?/<%=rs("id")%>.html">和</a>,即<a href="article.asp?/<%=rs("id")%>.html"><%=rs("title")%></a>。

1、Article.asp?/<%=rs("id")%>.html:这句代码实现了伪静态,当点击该链接后,地址显示的就是href的值。

2、至此前台脚本就写完了,最关键的一句就是article.asp?/<%=rs("id")%>.html。接下来写后台的处理数据。
index.asp:

<!--#include file="config.asp" -->

<%

var rs=Server.CreateObject("adodb.recordset");

sql="select * from Article";

rs.open(sql,conn,1,1)

while(!rs.EOF)

{

%>

<div><a href="article.asp?/<%=rs("id")%>.html"><%=rs("title")%></a></div>

<%

rs.MoveNext();

}

rs.Close();

rs=null;

%>

Step3:新建一个后台文件Article.asp,保存核心代码。由于连接数据库不是本专题的重点,故直接给出:

<!--#include file="config.asp" --> /*连接数据库的代码*/
<%

ReadNews(id); ‘从数据库中读出记录

%>

<div>

标题: <b><%=News_title%></b><br /> /*显示记录*/

内容: <%=News_content%>

</div>

Step4:由于传递进的url包含参数,故首先截取参数:

var sParam=String(Request.ServerVariables("QUERY_STRING"));

1、ServerVariables是asp的环境变量,UERY_STRING保存了动态url的参数。例如,如果url是www.oursn.com/essay.asp?/1.html,那么sParam保存的值就是问号以后的字符串,即sParam=/1.html。

2、String()是将参数强制性转化为字符串,这里Request .ServerVariables返回的是一个对象object,而不是字符出串,故需要转化。

Article.asp:

<!--#include file="config.asp" --> /*连接数据库的代码*/

<%

var sParam=String(Request.ServerVariables("QUERY_STRING"));

ReadNews(id); ‘从数据库中读出记录

%>

<div>

标题: <b><%=News_title%></b><br /> /*显示记录*/

内容: <%=News_content%>

</div>

Step5:截取参数字符串后,进一步获取id的值,这里是数字1,可以通过字符串方法replace()来实现:

var id=parseInt(sParam.replace("/","").replace(".html",""));

1、sParam.replace("/","")是用空格代替了sParam中的斜杠,即1.html。

2、sParam.replace("/","").replace(".html","")是用空格代替了1.html的. Html,即1,但这时的1还是字符串,再通过parseInt()强制转化为整型,最后赋给id。则id中保存是值型的1。

Article.asp:

<!--#include file="config.asp" --> /*连接数据库的代码*/

<%

var sParam=String(Request.ServerVariables("QUERY_STRING"));

var id=parseInt(sParam.replace("/","").replace(".html",""));

ReadNews(id); ‘从数据库中读出记录

%>

<div>

标题: <b><%=News_title%></b><br /> /*显示记录*/

内容: <%=News_content%>

</div>

config.asp中的代码:

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>

<%

var db="data.mdb";

var conn = Server.CreateObject("ADODB.Connection")

var connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(db);

conn.open(connstr);

var News_title,News_content;

function ReadNews(id)

{

var rs1=Server.createobject("adodb.recordset")

sql1="select id,title,content from article where id="+id;

rs1.open(sql1,conn,3,3);

News_title=String(rs1("title"));

News_content=String(rs1("content"));

rs1.Close();

rs1=null;

}

%>

2、 ISAPI_Rewrite程序

Step1: 下载ISAPI_Rewrite,下载地址:http://www.helicontech.com/download/。

PS:ISAPI_Rewrite分精简(Lite)和完全(Full)版. 精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理。

Step2: 安装.msi的文件。

Step3: 打开Internet 信息服务,右键web站点属性,ISAPI筛选器选项卡.添加筛选器,名称自己填,路径自己指定ISAPI_Rewrite.dll,然后确定。

1、web站点不是虚拟目录,而是与默认网站相同树根的站点,这一点要小心。

2、ISAPI_Rewrite安装好后,不要修改它的默认。

Step4:添加rewrite规则。找到ISAPI_Rewrite目录,把httpd.ini的只读属性去掉,打开编辑.我们要把essay.asp?id=1映射成为essay-1.html这样的类型,需要在httpd.ini里加上这么一行:
RewriteRule /essay-([0-9,a-z]*).html /essay.asp\?id=$1

Step5:来测试一下:

1、test.asp,里面写上

<%=request.querystring("inso")%>
2、在httpd.ini里加上这么一行:
RewriteRule /test-([0-9,a-z]*).html /test.asp\?inso=$1
3、保存.
4、到浏览器里查看一下效果吧.输入http://127.0.0.1/test.asp?inso=im286http://127.0.0.1/test-im286.html,显示的内容都是im286。

3、 XMLHttp组件

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>

<%

function saveData(body,path)

{

var os = Server.CreateObject("adodb.stream");

os.Type=1;

os.Mode=3;

os.Open();

os.Write(body);

os.Position = 0;

os.Type = 2;

os.Charset = "gb2312";

os.SaveToFile(path,2);

os.Close();

os = null;

}

var xmlHttp = Server.CreateObject("Microsoft.XMLHTTP");

xmlHttp.Open("GET","http://localhost/night/index.asp",false);

xmlHttp.Send();

saveData (xmlHttp.responseBody,Server.MapPath("/index.html"));

Response.Write ("保存成功,请打开<a href=/index.html>/temp.html</a>查看");

%>

来源:展洋科技 www.35544216.com



 


工作室地址:重庆石桥铺电脑城B座 | 微信:z35544216 | 网址:www.35544216.com