查看: 18241|回复: 3

[教程专区] ASP中静态页面的实现方法总结

[复制链接]
发表于 2013-3-16 21:45:19 | 显示全部楼层 |阅读模式
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://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 .
3.
1.新建一个文件夹info (因为最终访问信息的页面url为http://localhost/info/?1.html)
2.在info文件夹下新建一个default.asp文件(就是默认首页的那个页面)
default.asp文件的内容如下
复制代码 代码如下:

<%
currdomain=request.servervariables("http_host") '当前访问域名
currurl=replace(request.servervariables("query_string"),"404;http://"&currdomain&"/info/?","") '当前访问url
id=replace(currurl,".html","")
%>


其中id即是传入的参数
如果是多个参数可以把url伪静态化为info/?1-2-3.html
其中1,2,3各代表三个参数的值,分隔字符串分别提出即可。
真实html静态页面
把html代码写入到文件中然后生成.html格式的文件
复制代码 代码如下:

<%
  filename="test.htm"
  if request("body")<>"" then
  set fso = server.createobject("scripting.filesystemobject")
  set htmlwrite = fso.createtextfile(server.mappath(""filename""))
  htmlwrite.write "<html><head><title>" request.form("title") "</title></head>"
  htmlwrite.write "<body>输出title内容: " request.form("title") "<br /> 输出body内容:" request.form("body") "</body></html>"
  htmlwrite.close
  set fout=nothing
  set fso=nothing
  end if
  %>
  <form name="form" method="post" action="">
  <input name="title" value="title" size=26>
  <br>
  <textarea name="body">body</textarea>
  <br>
  <br>
  <input type="submit" name="submit" value="生成html">
  </form>


2、但是按照上面的方法生成html文件非常不方便,第二种方法就是利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值,完成模板功能;将最终替换过的所有模板代码生成html文件.这种技术采用得比较多,大部分的cms都是使用这类方法.
  template.htm ' //模板文件
复制代码 代码如下:

  <html>
  <head>
  <title>$title$ by aspid.cn</title>
  </head>
  <body>
  $body$
  </body>
  </html>testtemplate.asp '// 生成html
  <%
  dim fso,htmlwrite
  dim strtitle,strcontent,strout
  '// 创建文件系统对象
  set fso=server.createobject("scripting.filesystemobject")
  '// 打开网页模板文件,读取模板内容
  set htmlwrite=fso.opentextfile(server.mappath("template.htm"))
  strout=f.readall
  htmlwrite.close
  strtitle="生成的网页标题"
  strcontent="生成的网页内容"
  '// 用真实内容替换模板中的标记
  strout=replace(strout,"$title$",strtitle)
  strout=replace(strout,"$body$",strcontent)
  '// 创建要生成的静态页
  set htmlwrite=fso.createtextfile(server.mappath("test.htm"),true)
  '// 写入网页内容
  htmlwrite.writeline strout
  htmlwrite.close
  response.write "生成静态页成功!"
  '// 释放文件系统对象
  set htmlwrite=nothing
  set fso=nothing
  %>
回复

使用道具 举报

发表于 2026-5-22 12:15:00 | 显示全部楼层

Re: ASP中静态页面的实现方法总结

楼主总结得很详细,这几个方法正是ASP实现静态化的常用套路。我还想补充一点,isapi_rewrite对服务器的配置要求稍高,但效果最接近真静态,对搜索引擎友好;404伪静态则更灵活,适合虚拟主机用户。生成真实html的方式虽然占用空间,但访问速度最快。可以根据项目规模和环境选用。感谢分享!
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层

Re: ASP中静态页面的实现方法总结

感谢楼主分享这么详细的ASP静态页面实现方法总结。三种方案各有适用场景:isapi_rewrite适合服务器权限可控的环境,伪静态对程序改动小;404错误处理机制思路巧妙,适合不能安装组件的虚拟主机;而真实生成HTML文件对访问性能提升最直接,但需要维护生成逻辑。楼主还提供了具体代码示例,对想实现类似功能的朋友非常有帮助。另外提醒一下,使用模板生成静态页时,注意路径处理和FSO权限设置,避免生成失败。再次感谢楼主的整理!
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层

Re: ASP中静态页面的实现方法总结

感谢楼主的分享!这几招对于想要优化ASP站点URL结构或者做伪静态的朋友挺实用的,特别是isapi_rewrite那部分写得挺清楚,翻页的例子一看就懂。我自己以前用过404转向的思路,但确实如你所说,扩展性有限,后来还是换成了重写组件。不过404那个方案在权限不够装组件的时候能临时救急,也算个备选方案吧。生成真实静态页面那个用FSO的方法也很经典,适合内容不常更新的页面。总之三个方法各有适用场景,新手可以按自己的环境选着用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-25 22:31 , Processed in 0.056209 second(s), 21 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部