|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧静态天生的网页在机关真正年夜型的网站时是不成短少的。可是,静态页面的名字(即它的URL)常常缺少明白的寄义。比方,名为product.ASP?Id=4的页面总不如名为/applicances/dishwashers/Model3809.htm的页面来得好记。本文先容怎样完成静态页面名字和静态页面的映照。概述
静态页面名字除具有寄义更明白这一长处以外,它的别的一个长处在于搜刮引擎可以索引这些页面。年夜多半搜刮引擎,如AltaVista和Yahoo,不会检索URL中带有问号的页面,由于它们忧虑进进永无尽头的链接迷宫。把静态页面名字转换成静态页面名字以后,搜刮引擎就会对这些页面举行索引和分类,从而为网站带来更多的会见量。
要利用本文先容的办法将静态名字转换成静态名字,你必需利用Windows2000和IIS5.0。IIS5.0的两个改善使得我们能够完成这类转换,它们是:利用Server.Transfer的“自界说毛病信息”功效和在ASP页面中利用Server.Transfer的才能。固然IIS4.0也撑持自界说毛病信息,但它利用的是Response.Redirect,没有效,以是本文办法请求利用IIS5.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毛病。这能够用IIS5.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)
EndIf
从产物型号往失落.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)
EndIf
从产物数据库查找产物编号
strSQL="SELECTProduct_IdFROMProduct"_
&"WHEREProduct_Model="&strModelNumber&""
SetoRS=oConn.Execute(strSQL)
If(NotoRS.EOF)Then
lProductId=oRS("Product_Id")
EndIf
%>
如今我们失掉了产物编号,在转换到准确的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的函数。
<%
FunctionCreateProductURL(lProductId)
strSQL="SELECTProduct_ModelFROMProduct"_&"WHEREProduct_Id="&lProductId
SetoRS=oConn.Execute(strSQL)
If(NotoRS.EOF)Then
strModel=oRS("Product_Model")
EndIf
CreateProductURL="/"&strModel&".htm"
EndFunction
%>
如今假如我们要到场URL,只需依照以下体例举行:
<AHREF="../../<%=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。
小结
使用IIS5.0的自界说毛病信息功效把持404毛病能够为静态页面制造出静态页面作风的URL。只需无需创立这些静态URL所用到的目次和文件,那末应当说创立这类既利于市场宣扬、也利于搜刮引擎排位的URL是相称复杂的。
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了! |
|