分享
 
 
 

用静态URL显示动态网页

王朝html/css/js·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

动态生成的网页在构造真正大型的网站时是不可缺少的。但是,动态页面的名字(即它的URL)往往缺乏明确的含义。例如,名为product.asp?Id=4的页面总不如名为/applicances/dishwashers/Model3809.htm的页面来得好记。本文介绍如何实现静态页面名字和动态页面的映射。

概述

静态页面名字除了具有含义更明确这一优点之外,它的另外一个优点在于搜索引擎能够索引这些页面。大多数搜索引擎,如Alta Vista和Yahoo,不会检索URL中带有问号的页面,因为它们担心进入永无止境的链接迷宫。把动态页面名字转换成静态页面名字之后,搜索引擎就会对这些页面进行索引和分类,从而为网站带来更多的访问量。

要使用本文介绍的方法将动态名字转换成静态名字,你必须使用Windows 2000和IIS 5.0。IIS 5.0的两个改进使得我们可以实现这种转换,它们是:使用Server.Transfer的“自定义错误信息”功能以及在ASP页面中使用Server.Transfer的能力。虽然IIS 4.0也支持自定义错误信息,但它使用的是Response.Redirect,没有用,所以本文方法要求使用IIS 5.0。Response.Redirect之所以没有用,是因为搜索引擎不会追随重定向。

使用本文所介绍的方法,网站开发者先用静态风格的URL链接事实上并不存在的页面。然后设置IIS服务器,告诉它要用指定的ASP页面(404.asp)来处理网站上出现的所有404错误。在这个404.asp页面里,把原来的URL转换成正式的动态URL,利用Server.Transfer执行并向用户浏览器返回目标页面。

假设有如下URL:

http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm

其中myserver.com以网站的域名取代,该URL将返回404错误。我们首先要做的是用某个专用的.asp页面来处理所有这些404错误。这可以用IIS 5.0的“自定义错误信息”功能来实现。设置该功能的过程如下:

●在MMC中打开IIS服务器管理器

●右击Web网站节点,然后选择“属性”

●点击“自定义错误信息”页

●向下滚动,直至找到404错误

●双击404错误,打开“错误映射属性”对话框

●将消息类型改为URL

●在URL框输入“/404.asp”

●点击“确定”关闭窗口

现在404错误已经由404.asp处理了。当IIS调用404.asp页面时,它会提供导致这个404错误的URL,这对我们来说是非常有用的。

错误处理页面

接下来我们创建处理错误的404.asp页面。首先要做的是获得导致这个404错误的页面名字。下面这行代码从查询字符串提取这个页面的名字:

< %

'获得页面名字

strQ = Request.ServerVariables("QUERY_STRING")

% >

那么,strQ中的哪些内容才是重要的呢?在上例中它应该如下所示:/applicances/dishwashers/kenmore/Model3809.htm。我们真正需要的只有其中的Model3809(产品型号),因为这是产品数据库中的唯一键。下面这几行代码根据产品型号找出产品的ID(编号):

< %

' 计算产品型号

nIndex = InStrRev(strQ,"/")

If (nIndex >0) Then

strModelNumber = Right(strQ,Len(strQ)-nIndex)

strQ = Left(strQ,nIndex-1)

End If

' 从产品型号去掉.htm后缀

If ((Mid(strPageName,Len(strPageName),1)="m") And _

(Mid(strPageName,Len(strPageName)-1,1)="t") And _

(Mid(strPageName,Len(strPageName)-2,1)="h") And _

(Mid(strPageName,(strPageName)-3,1)=".")) Then

strModelNumber =Left(strPageName,Len(strModelNumber)-4)

End If

' 从产品数据库查找产品编号

strSQL = "SELECT Product_Id FROM Product " _

& "WHERE Product_Model = '" & strModelNumber & "'"

Set oRS = oConn.Execute(strSQL)

If (Not oRS.EOF) Then

lProductId = oRS("Product_Id")

End If

% >

现在我们得到了产品编号,在转换到正确的ASP页面之前必须先保存它。我们无法通过Server.Transfer在查询字符串中传递产品编号(这是IIS的一个局限),因此必须通过Session对象来传递它。

< %

Session("Id") = lProductId

Server.Transfer("/product.asp")

% >

执行这个页面时,浏览器地址栏中的内容如下:

http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm

由于使用了Server.Transfer,浏览器地址栏中的URL不会改变,同样浏览器也不需要与服务器再交互一次,这与Response.Redirect是不同的。

另外也请注意URL中的目录是根本不存在的,事实上在这里URL中除了服务器名字之外的其余内容根本不起什么作用。例如,下面的几个URL都将返回同一页面。

http://www.myserver.com/Model3809.htm

http://www.myserver.com/trucks/ford/Model3809.htm

那么为什么要加上这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词是比页面标题和正文更重要的搜索关键词,所以目录名字是非常重要的。

调用不存在的页面

我们已经讨论了将并不存在的URL转换为有效动态URL的技术。然而,要让搜索引擎能够索引这些页面,我们还需要链接这些并不存在的URL。换句话说,只有当我们链接了Model3809.htm页面后搜索引擎才会发现它。

以前链接这种页面时我们只需按照如下方式给出产品编号:“product.asp?Id=4”。现在我们就来构造一个以产品编号为参数返回恰当URL的函数。

< %

Function CreateProductURL(lProductId)

strSQL = "SELECT Product_Model FROM Product " _ & "WHERE Product_Id =" & lProductId

Set oRS = oConn.Execute(strSQL)

If (Not oRS.EOF) Then

strModel = oRS("Product_Model")

End If

CreateProductURL = "/" & strModel & ".htm"

End Function

% >

现在如果我们要加入URL,只需按照如下方式进行:

< A HREF="< %=CreateProductURL(4)% >" >洗碗机< /A >

本例我们假定不知道产品型号名称,必须查询数据库才能得知。但在现实中可能并非如此,我们知道产品的型号名称,可以直接创建URL而无需再次访问数据库。

性能问题

本文所介绍的方法会明显地影响性能。首先,为了创建静态风格的URL它需要一次数据库调用。其次,为了从产生404的URL出发得到正确的URL,它还要增加一次额外的数据库调用。最后,两次Server.Transfer需要较大的开销。

不过,有些性能问题可以用XCache(www.postpointsoft.com)来解决。XCache能够把出现404错误的URL转换到正确的页面,并缓存该信息以供后来的请求使用。

实例

请访问http://www.kulshan.com,这是一个应用本文技术的例子。Kulshan.com的大多数分支页面,如餐馆、饭店的评论,都为了在搜索引擎中获得更高的评价而使用了这种技术。Kulshan.com也使用了XCache。

小结

利用IIS 5.0的自定义错误信息功能控制404错误可以为动态页面制作出静态页面风格的URL。只要无需创建这些静态URL所用到的目录和文件,那么应该说创建这种既利于市场宣传、也利于搜索引擎排位的URL是相当简单的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有