网站地图 设为首页 加入收藏
 
红月私服中心 下载中心 发布红月 技术资料 发布家族 游戏IP生成      
ASP伪静态技术
文章作者:管理员 文章来源:红月私服中心-Www.hy45.Net 更新时间:2012-2-12 14:52:47 
实现静态的三种方法
1、 重写url参数
参数过多,也不利于搜索引擎收录,故可以通过修改参数实现静态。
先看动态的url地址,当我们点击它时,页面跳转到essay.asp页面的同时,还传递给页面一个参数id=1,然
后我们取得了id的值,再由"select * from article where id="& ID 找到对应的记录。由此可知,整个过程的
关键是取得参数的值,所以,也可以在静态的url包含该参数的值。
又要包含参数的值,又要考虑静态,于是得出一个解决方案,即要实现这样的转换:
www.hy45.net/essay.asp?id=1
www.hy45.net/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.hy45.net/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>查看");
%>


浏览次数:39
最新文章
· 太阳之征【魔道版】破解...
· 红月私服自由军团存储汉化之自由军解散原因...
· 红月私服自由军团存储汉化之战争时间修改(二)...
· 红月私服自由军团存储汉化之战争时间修改(一)...
· 红月私服自由军团存储汉化之战争密码...
· 红月私服自由军团存储汉化之战争...
· 红月私服自由军团存储汉化之预备自由军成立...
· 红月私服自由军团存储汉化之军队总部已封闭...
· 红月私服自由军团存储汉化之未完成预备军通知...
· 红月私服自由军团存储汉化之税收...
热门文章
· 红月技能点属性上限...
· 红月私服角色之说...
· 3.8C红月私服限制部分外挂的方法...
· 调皮外挂不能正常使用...
· 升华原版升级代码...
· 红月服务器如何做到冲卡的...
· 地图能否PK的设置...
· 红月NPC各地点坐标...
· 积分计算方式...
· Web服务器安全加固步骤(四)...
关于我们 开区服务 网站帮助 全部私服
 
CopyRight @2010 hy45.net, Inc. All Rights Reserved  

备案登记号:苏ICP备11017169号-1