




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ASP彻底实现伪静态化html这段时间在网上待的时间较多!为了查找关于实现ASP动态内容的静态化处理花了我的多少时间,到处看了下,大多数是转载而来,几乎雷同,主要有以下几种方法:1 用程序写到硬盘.ASP FS对象的文件流处理.每个文章都有实际的路径.如果要发布大量内容,则需要大容量空间,而且不好维护,修改都不方便,好处在于减轻服务器的访问负担,容易被搜索引擎收录,大大减少并防止黑客攻击,稍有规模的网站都全部静态化了,如新浪,搜狐等.2 组件如ISAPI_Rewrite重写.有自己服务器的站长还好办,虚拟主机的朋友就稍麻烦,除非请求服务商安装这个插件,再将程序参数提交服务器实现转化,看上去是静态化了,实际上是用静态路径访问数据库的内容.对于搜索引擎收入有一定作用.而且许多站长正是为此为苦苦寻找.以上两种方法俱体怎么做,大家上网搜索一下就会发现一大把.3 第三种比较假就是把show.asp?id=26 转成show.asp?/26.html这样做也许对搜索引擎来说有点作用,不过防安全注入一点作用也没有.但只要做好防范工作,这种方法还是比较适合大多数虚拟主机的站长们.我这里就重点介绍使用第三种方法来实现静态化处理.本实例实现效果:/news.asp?id=201转换成/news/?/201.html一 准备工作在网站目录新建文件夹news,并新建一个主页文件index.asp,数据库data.mdb(字段id,Title,Content,)及ConnDB.asp二代码实现数据连接文件ConnDB.asp news-list.asp a href=news/?/.html _fcksavedurl=news/?/.html 好了,现在编写新闻正文阅读页面news/index.aspindex.asp 主题 正文 这样实现的效果如:/news/?/201.html 我们知道Windows文件夹命名规则是不允许包含?的所以在这里只起视觉欺骗的作用.同样我们能否将?通过replace函数转换成这种效果:/news/read/201.html 呢?这是我目前总结出来的,准备用在我的主页上,演示地址:(未完),当然,我相信会有更好的解决方法,如果有兴趣的朋友请来本站交流.文章来自:/article/20080107/67882.shtml简单宜用的网站静态化思路及代码分析静态化是有很大好处的。最值得称道的应该是加快下载速度,更利于搜索引擎的抓取,这两点对一个企业网站来说应该比较重要吧。一般的静态化是通过fso组件读取网站模板的内容,然后替换其中的特定字符,生成静态页面,这是个不错的想法,如果你要自己写一个网站,建议你用这种办法,因为比较稳定。而且如果想以后更换网站界面也相当容易,只需修改模板而无需更改程序。这个办法很多高手已经说得很明白了,推荐一个:/Blog/zjh/265.html然而很不幸,很多公司的网站已经做好,而且每一页都是html中夹杂大量asp代码的形式,没有模板,功能也没有模块化,如果想仍用以上方法进行静态化处理,其复杂程度相当于重做一个网站。提出一个简单宜用的解决办法。不用模板、不用修改程序,非常便捷。利用XMLHTTP对象及其方法。他的原理是将已有的asp网页内容一次性读取出来,然后写到静态页中,实现网站的静态化重构。现在以生成 的首页为例,介绍一下这种方法,代码如下:Url=/default.asp 定义动态首页wstr = GetPage(Url) 把动态首页的内容全部读取出来Set fs=Server.CreateObject(Scripting.FileSystemObject)Set CrFi=fs.CreateTextFile(server.MapPath(./)&index.htm) 创建静态首页index.htmCrFi.Writeline(wstr) 将读取出的内容写入静态页面set CrFi=nothing 关闭两个对象set fs=nothing以下两个函数涉及到xmlhttp对象和方法的使用,如果能看懂就看,看不懂直接调用就行。Function GetPage(url) 此过程的功能是实现把asp网页的内容一次性读取出来。dim RetrievalSet Retrieval = CreateObject(Microsoft.XMLHTTP) With Retrieval .Open Get, url, False , , .Send GetPage = BytesToBstr(.ResponseBody)End With Set Retrieval = Nothing End FunctionFunction BytesToBstr(body)字符转换dim objstreamset objstream = Server.CreateObject(adodb.stream)objstream.Type = 1objstream.Mode =3objstream.Openobjstream.Write bodyobjstream.Position = 0objstream.Type = 2objstream.Charset = utf-8 如果是中文页面请用gb2312.,英文页面用utf-8BytesToBstr = objstream.ReadText objstream.Closeset objstream = nothingEnd Function首页的静态化就完成了,生成为 index.htm 这个静态页,其他的页面也可以按照这个思路进行,利用不同的后缀id值,就可以批量生成所有网页。两点注意:1、如果是批量生成页面要保证网速,否则程序的运行很容易超出服务器的允许时间。 2、生成英文页面的时候,要保证原页面上没有汉字或其他语言,否则生成出错。这种静态化相对比较容易,尤其是那些对那些写的很差劲的网站进行静态化处理。我一直用这种方法给企业静态化处理。有机会我会把这种方法进一步写成类,方便各位网友调用。下边说说两种骗人的静态化方案,引起各位注意。1、框架伪静态,这种是非常简单而且也是非常便于识别的,它的原理比较简单,就是做一个静态的主框架页面,然后把动态的内容链入副框架内,这个单从它的URL就可以看出眉目,如果整个网站的URL都是一样的,那么就一定是框架伪静态的。这种所谓的静态化不仅达不到优化的目的,而且还不如不优化。2、利用组件把asp的辍显示为htm,它主要是利用一个组件强制性的把asp文件的后辍显示为htm,比较有名的组件是MOD REWRITE,这种东西只是在形式上让你感觉已经静态化了,其实仍然是执行动态网页。识别这个也比较容易,那就是看看有没有生成静态页就是了。如果没有生成静态页,显然是骗人的,因为只有动态页才是虚拟的,从数据库中调用数据进行显示,而静态页面一定是独立的。当然,利用这种方案可以起到seo优化作用,但是对访问速度来说,是一点提高都没有的,而且还有可能降低访问速度。网站静态化 rewrite apache seo 大家一说起网站的高性能,第一时间想到的就是使访问者访问的是静态页面,因为大家都知道访问静态页面的开销比动态的要小得多,而且高效得多。这也是前几年seo专家们普遍优化网站的重点之一。但是对于目前网络上内容变化频繁的大型网站而言(如淘宝),使用静态页面访问虽然很好。但是细细想一下,以淘宝这样的规模,其静态化网站的页面至少有几十万,甚至上百万。这样维护一个如此大规模的静态文件,其难度程度可想而知了,最重要的是其页面内容是经常更新的,如我们一个宝贝的页面,要显示店主的在线状态、用户的购买情况等等,这些都是可能随时更新的,因此对于这样的网站实行静态化,个人感觉无疑于“自杀”!话可能说的有点过了,呵呵,网站静态化对于小型网站,页面内容更新不需要很频繁的网站无疑是优化网站性能的一个很重要的方面,而且网站静态化对于SEO也是非常有帮助的,虽然目前的搜索引擎也支持动态生成的内容,但似乎更青睐静态页面,包括伪静态页面。 以前在开发系统时,也有一个门户的部分,当时考虑到系统的性能问题也使用静态化页面,但并不是传统的html页面,而是xml+xsl文件的组合,这样改变xsl文件后整个网站也就随之改变了,达到了内容与显示的分离,同时也实现了静态化。当然了,那个门户基本上都是新闻发布之类的,对于其内容的更新不是非常多,所以这样处理就很方便和实用了。刚刚也说到了使用伪静态化似乎是大型网站的更好的选择,因为不需要维护大量的静态文件。我们可以看到对于淘宝、163、sohu等网站,虽然其新闻页面和宝贝页面是html后缀的,但是同时也看到其内容应该是属于动态更新的,要不然,还真是无法想象。所以可以想到,目前的大型网站几乎很少用静态页面来访问的,多数是基于伪静态化的访问方式。伪静态化就是说访问地址看上去其后缀是html或htm等形式,但其内容实际上是动态生成的。那么如何实现网站的伪静态化呢?这个也是我下面要说的,就是URL的rewrite,即URL的重写技术。 我们以apache2.2为例来说下如何实现url的rewrite,首先要给apahce2安装rewrite模块,操作步骤如下: Java代码 1. #cd/home/ 2. #tarxfhttpd-2.2.6.tar.gz 3. #cdhttpd-2.2.64. #./configure-prefix=/usr/local/apache2.2-enable-so-with-mpm=worker-enable-module=rewrite-enable-shared=rewrite 5. #make&makeinstall 6. #cdmodules/mappers/ 7. #/usr/local/apache2.2/bin/apxs-cmod_rewrite.c-lgdbm 8. #gcc-shared-omod_rewrite.somod_rewrite.o-lgdbm 9. #/usr/local/apache2.2/bin/apxs-i-A-nrewritemod_rewrite.so#cd /home/#tar xf httpd-2.2.6.tar.gz#cd httpd-2.2.6#./configure -prefix=/usr/local/apache2.2 -enable-so -with-mpm=worker -enable-module=rewrite -enable-shared=rewrite#make & make install#cd modules/mappers/#/usr/local/apache2.2/bin/apxs -c mod_rewrite.c -lgdbm#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm#/usr/local/apache2.2/bin/apxs -i -A -n rewrite mod_rewrite.so这样我们就安装好了apache的rewrite模块,然后我们就可以使用正则式来匹配url并替换了。apache使用rewrite模块的格式如下: RewriteEngine On #开启rewrite模块 RewriteRule 源地址的正则式 rewrite后的真实地址 通常对于如下的动态地址我们可以使用相应的静态地址进行重写,如下: Java代码 1. /bbs/list-4-1.html/mybbs/show-topic.do?border=4&page=1/bbs/list-4-1.html /mybbs/show-topic.do?border=4&page=1这样我们在apache中就可以这样写入: Java代码 1. RewriteRule/bbs/list-(0-9+)-(0-9+).html$/mybbs/show-topic.do?border=$1&page=$2ptRewriteRule /bbs/list-(0-9+)-(0-9+).html$ /mybbs/show-topic.do?border=$1&page=$2 pt像上面的地址我们就是将所有/bbs/list-4-1.html这样的地址匹配成/mybbs/show-topic.do?border=4&page=1这样的动态地址,同时转给tomcat来进行处理(rewriteRule后的pt标志)。我们假设以静态页面为例子的话,同时假设apache的网站根路径是/www/test/,我们在根目录下建立123.html文件,然后在apache的配置文件中写入如下的重写规则: Java代码 1. RewriteRule/show/news-(0-9+).html$/$1.htmlRewriteRule /show/news-(0-9+).html$ /$1.html这样,当我们访问/show/news-123.html的时候,就会被apache重写为/123.html,也就是访问到根目录下的123.html文件了,如果有246.html文件在根目录下,那么我们就可以访问/show/news-246.html了。 通过url的rewrite技术,我们可以很方便的来伪静态化网站,同时又实现动态的内容,而且对于seo也有一定的帮助,呵呵另外,在lighttpd中使用rewrite也是非常方便,正则式基本上差不多。 搜索引擎优化中网站静态化的三种方式优劣对比来源:搜索引擎优化(seo)及网站优化杂谈 发布时间:2008-06-06 22:52:39一提到搜索引擎优化,很多人认为页面静态化是一项重要的功能,那么你是否了解静态化,有哪些静态化方式?本文就此对三种网站静态化的方式做个简单的比较。第一种是纯手工制作页面(如 韦氏个人简历翻译工作室)。这种方法的好处是,空间成本较低,不需要支持数据库的空间,但是缺点显而易见,不利于页面比较多的网站,同时页面维护相对困难,对于一些个人网站,或者简单的企业介绍站点,可以用这种方式。第二种是通过后台模板技术,读取数据库记录生成静态网页,(如个人简历网 /),这种方式的好处相对于动态页面服务器资源消耗小,基本上不用读取数据库,缺点是生成的静态页面将占用过多的服务器空间,在记录较多的情况下,每次服务器都要进行长时间的重新生成页面工作。此外,对于技术上的要求也比较高。第3种方式则是最近比较流行的url rewrite 了,也就是伪静态,本质上整个站点其实是动态的,但是通过url rewrite,原本动态的页面看上去编程了静态页面,比如(深圳百琴钻石直销网 /)假设原本有个页面为 /product.asp?id=11,通过url rewirte 就变成了 /product_11.html,伪静态具有很明显的好处,更新便捷,因为实际上还是动态页面。占用空间小,但是伪静态有2个不好的地方,一个是相对动态页面而言,由于增加了地址重写的步骤,会比原本的动态网站消耗更多的服务器资源,一旦访问量比较大,问题会比较严重,还有一个问题是伪静态页面需要对原本的程序进行改动,使输出的动态地址变成伪装后的静态地址,同时url 重写都是使用正则表达式,因此需要站长具有一定的对程序进行二次开发的能力附表 三种静态化方式的比较手工静态化模板静态化url rewrite伪静态占用硬盘空间少多少占用服务器资源小小大技术难度简单难难后期维护难中简单需要学习的内容html模板技术在线生成文件正则表达式网站静态化之rewrite,pathinfo和静态页面分析作者:不要清闲 2008-04-27 09:55:38 点击:350 评论:0随着SEO的普及,静态化便成为网站开发的必要技术之一。网站静态化通常有三种方法可以实现,一种是伪静态,一种是实实在在的静态页面,最后一种是pathinfo技术。伪静态下,如果是apache服务器,是通过.htaccess文件来操作。如果是IIS服务器,则是通过httpd.ini和rewrite.dll来实现。伪静态处理的关键技术是配置文件的规则如何得到有效的控制,并在html页面里对应起来,一旦规则改变,则html页面里的链接也需要根据规则动态的改变。后台设置规则,并且写入.htaccess文件,同时根据规则生成php语言的规则,那么在php程序里根据规则显示页面的不同内容。这种方式的难点在于对htaccess文件的彻透理解和应用以及php正则表达式的灵活运用上。通过这种方式转化的静态页面的路径有两种表现形式,一种是非常规则的,比如一篇文章,article.php?artid=12,则转化成静态页面可能就是这样:article-do-view-artid-12.html。因为每个页面必须要有动作和对象,这样便于统一管理,也可以表示成这种形式:article/do/view/artid/12.html等等。这种形式只要在htaccess文件中写一句话便可以控制全局,那就是RewriteRule (-*)-(.*)$ $1.php?$2 。这样,整个规则就只有一个规则,程序里要做的只有对$2号的字符串进行处理,相对简单。第二中形式就相对人性化点,美观点,我们要把连接形式转化为article/12.html 或者 article/hello-world.html 更或者 article/hello-world_page2.html ,这种方式要对每个连接都作处理,如果只给出这种规则,计算机是不能理解的,除非给成 article/(.*)(_page0-9).html 这种规则,那么在处理上就有相当大的难度,因为要把rewrite的规则解析为php的正则并进行替换,还有这些规则必须由熟悉rewrite和php的程序员来写,不利于推广。静态页面,只要把目录地址保存在数据库里调用,但是有些动态的信息,比如登录信息,文章点击数等需要做动态的改变,这种情况主要通过js和重新生成静态页面来显示. 这里给出两种生成静态页面的方法:一、通过ob函数来控制浏览器输出。 ob_start();include template(index);$data = ob_get_contents();ob_clean();file_put_contents($filename, $data);二、通过预先得知这个页面的地址来通过网页抓取。function create_html($filepath, $phpfile, $page = 1)global $siteurl;$filepath = ROOT.$filepath;$htmlpath = substr($filepath,0,strrpos($filepath,/);if(!is_dir($htmlpath)makeDirs($htmlpath);$contents = dfile_get_contents($siteurl.$phpfile);dfile_put_contents($filepath, $contents);伪静态的优点主要在于灵活,相对于静态文件就是不需要额外的脚本来生成或控制静态页面的内容,不占用服务器空间。由于是服务器内部解析的地址,所以内容是实时更新的,也不存在文件管理和硬件问题,维护比较方便。在服务器级URL Rewrite重写技术并不影响页面的执行速度。但是URL Rewrite的门槛比较高,国内虚拟主机大多不支持,而且虚拟主机是目录级的url Rewrite,通过遍历目录读物URL转发规则的方式将大大降低页面的执行速度。静态页面的好处在于少了动态解析过程,提高了页面的访问速度和稳定性,使得优化效果非常明显。对数据库和服务器的软件资源耗费少。但是占用了服务器的硬件资源,对于大型网站而言,这种方法将带来不可忽视的后继问题: 由于生成的文件数量较多,存储需要考虑文件、文件夹的数量问题和磁盘空间容量的问题,需要大量的服务器设备;程序将频繁地读写站点中较大区域内容,考虑磁盘损伤问题及其带来的事故防范与恢复,硬件损耗要更新、站点备份要到位;页面维护的复杂性和大工作量,及带来的页面维护及时性问题,需要一整套站点更新制度和专业的站点维护人员;对于第三种方式,php业界流行的框架比如zend,thinkphp就应用的比较多,归根结底,他们在某些条件下也缺少不了.htaccess这个文件,因为他们的目的都是想要把所有的连接(除过图片,js,css)都指向index.php这个文件。这里用到的主要技术之一便是pathinfo,关于pathinfo的原理,这里就不再做过多讨论了。这种技术和用.htaccess技术的区别就在于没有使用.htaccess文件,好像说的是废话,不过还是需要注意的。所以综合上诉原因,个人认为: 对于一般企业网站,个人网站,这些网站信息一旦发布就很少更改,网站信息量不多的情况下,而且一般使用的是虚拟主机,可以选择生成静态页的方式。对于大型网站,信息量巨大,具有独立服务器,可采用URL Rewrite 的方式。对于一些中型网站,使用虚拟主机的就采用生成静态页的方式,有条件购置服务器的可视具体网站类型而定,若网站交互性较强,局部更新内容比较多的话,可以采用Rewrite,若页面内容比较固定的话,使用静态页生成技术效果就更佳。Xerdoc网站静态化备忘那天在看Xerdoc网站统计的时候突然发现,Google的机器人每次来了只索引了了几个页面,内容很少。突然想起,Google的机器人似乎不索引这些带有Get参数的URL,这就意味着这些URL、包括这些页面涉及的URL都不会被索引,这就导致了整个网站被索引的量很低。这是因为普遍认为互联网上静态页面的价值大于动态页面尤其是这些带有参数的动态页面,其它搜索引擎也大多如此。因此,面向搜索引擎来设计网站的一个很重要的方式就是网站的页面静态化。静态化通常有两种方式:一种是通常CMS支持的,将内容真正以静态的方式发布,这种方式的典范是MovableType,它的面向搜索引擎的设计堪称经典;第二种方式是用“静态化的URL”(URL美化)来替换这些动态的URL,其实就是“骗骗”这个Google的小机器人,让他认为我们的URL是一个静态页面。用URL美化来提高搜索引擎的友好度主要有两种方式:1)URL Rewriting;2)PATH_INFO,车东和John Coggeshall在这方面都有很好的文章。Search Engine Friendly的URL设计 - 车东Search Engine Friendly PHP Pages - John CoggeshallURL Rewriting主要是利用Apache中的rewrite_module来实现URL的重写(IIS中也有相应的模块,具体见此)。简单的说,该Module就是一个采用正则表达式进行分析,替换的Filter,来实时的改变用户请求的URL。改写的规则可以定义在服务器范围内(httpd.conf)、目录范围内(.htaccess),因为一般的虚拟主机不允许我们修改httpd.conf,所以我们只能来修改每个目录内的.htaccess文件了。但是从效率上来说,httpd.conf内定义的规则只在Apache启动的时候进行加载,所以效率很高,而.htaccess中定义的规则,在每次URL访问的时候都要重新访问此文件,大大的降低了效率。利用URL Rewriting进行静态化的效果非常好,比如,Xerdoc中的静态化就是这样:home.html - shell.php?pos=home 竹笋炒肉的Apache的Mod_rewrite学习详细的介绍了 rewrite_module工作的原理,如果您感兴趣,可以看看。另一种进行URL美化的方式就是采用PATH_INFO。PATH_INFO是一CGI的标准,一般的虚拟主机都有支持(在没有PATH_INFO支持的情况下,可以试试这样得到PATH_INFO: 1. $PATH_INFO= substr($_SERVERREQUEST_URI,strlen($_SERVERSCRIPT_NAME), strlen($_SERVERREQUEST_URI);)。PATH_INFO的主要原理是:当Server访问的页面或者目录不存在的时候,会依次访问“/”前面的文件,直到找到能够访问的文件为止。Web Server同时会创建一个名位 $PATH_INFO的变量,来记录除此文件外的其它URL信息。比如:shell.php/pos/home 这个URL,最后访问的实际文件是 shell.php,而PATH_INFO的值是 /pos/home这样,在PHP脚本中,可以解析这个PATH_INFO的值,得到相应的参数。周六正好有时间,于是用静态的URL重构一下网站,来提高搜索引擎的友好度。(最近还有一个想法是重新用XHTML标准重构一下网站,完全用CSS来定义风格,忙完这阵子和曹飞商量一下)。Xerdoc的服务器架设在上,服务很是一般。本来想当然的以为不会支持rewrite_module来进行改造,就开始尝试PATH_INFO来进行改造。像前面介绍的那样,在代码中解析PATH_INFO,然后再利用解析后的参数进行查询。比如 shell.php/pos/home 这个URL,PATH_INFO的值为 /pos/home,然后可以得到每个参数。1. list($dummy, $first, $last) = explode(/, $PATH_INFO)1. 这里需要注意的是,第一个参数为空,所以我们用dummy来存。过程很简单,不过出现了意料之外的问题相对路径(Relative Path)的问题。比如shell.php中的CSS和Image文件都存在同级的images文件夹中,而引用的图片也都采用诸如“”这样的相对路径方式,但是通过“shell.php/pos/home”这样的URL来访问的话,图像的实际路径变成了 “shell.php/pos/images/image.gif”,显然是错误的。想来想去,有几种解决方案:1)采用绝对路径来引用图片,修改量比较大,而且这些绝对信息将会引起将来重构或者搬移的难度;2)计算PATH_INFO中的路径层数,在图像引用路径前面加上N(路径层数)个“./”,从而找到正确路径;3)设置 BASE HREF 为该文档的真正URL,具体见此;4)统一入口,统一所有资源文件的位置。车东提到可以参考wiki中的资源处理方式,等忙过这段,需要学习再来补充。:-)这样看来,利用PATH_INFO来进行改造,需要修改的地方比较多,于是突然想起,何不试试Xerdoc的Server能否支持Apache的Rewrite Module。于是,在需要静态化的目录中加了一个简单的.htaccess文件,内容如下:RewriteEngine OnRewriteRule (.+).html$ shell.php?pos=$1 L然后开始访问,结果遇到下面的错误:ForbiddenYou dont have permission to access /web/zhcn/shell.php on this server.本以为是权限的问题,其实不是,而是由于Server的httpd.conf中将FollowSymLinks禁止了,也就是禁止了符号链接。来看看Apache Document中对FollowSymLinks的定义:FollowSymLinksThe server will follow symbolic links in this directory. Even though the server follows the symlink it does not change the pathname used to match against sections.Note also, that this option gets ignored if set inside a section.因此,我们需要在.htaccess中进行设定: Options FollowSymLinksok,再试试,结果还是有问题:Not FoundThe requested URL /u//web/zhcn/shell.php was not found on this server.这是因为没有设置Rewrite的Base设置,在.htaccess中加上下面的设置:RewriteBase /web/zhcn/一切正常。可以看到,利用Apache的URL Rewrite模块来进行URL美化,不用更改代码,同时,也可以一定程度上的隐藏后台的实现,屏蔽将来内部设计的变化,缺点就是带来效率上的损失。.htaccess还可以控制该目录下文件的访问权限,这里不多说,需要注意的是这个文件自己也需要保护起来:一种是用文档的自己的权限,另一种是在.htaccess中添加以下部分: order allow,deny deny from all 参考资料:URL Rewriting Engine - ASearch Engine Friendly的URL设计 - 车东Search Engine Friendly PHP Pages - John CoggeshallIIS 的 Rewrite模块Apache的Mod_rewrite学习 - 竹笋炒肉/download-isapi_rewrite3.htm Google排名优化面向Google(Search Engine Friendly)的URL设计作者:车东 发表于:2003-05-10 18:05 最后更新于:2007-04-12 11:04版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。/tech/google_url.html 内容摘要:不得不承认,将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎优化方式此外随着互联网上的内容以惊人速度的增长也越来越突出了搜索引擎的重要性,如果网站想更好地被搜索引擎收录,网站设计除了面向用户友好(User Friendly)外,搜索引擎友好(Search Engine Friendly)的设计也是非常重要的。进入搜索引擎的页面内容越多,则被用户用不同的关键词找到的几率越大。在Google的算法调查一文中提到一个站点被Google索引页面的数量其实对PageRank也是有一定影响的。由于Google 突出的是整个网络中相对静态的部分(动态网页索引量比较小),链接地址相对固定的静态网页比较适合被Google索引(怪不得很多大网站的邮件列表归档和BLOG按日期归档的文档很容被搜的到),因此很多关于面向搜索引擎 URL设计优化(URI Pretty)的文章中提到了很多利用一定机制将动态网页参数变成像静态网页的形式:比如可以将:/index.php?mode=man¶meter=ls变成:/index.php/man/ls实现方式主要有2种: 基于url rewriteIIS的ISAPI REWRITE下载(免费) 基于path_info 把URI地址用作参数传递:URL REWRITE最简单的是基于各种WEB服务器中的URL重写转向(Rewrite)模块的URL转换:这样几乎可以不修改程序的实现将 news.asp?id=234 这样的链接映射成 news/234.html,从外面看上去和静态链接一样。Apache服务器上有一个模块(非缺省):mod_rewrite:URL REWRITE功能之强大足够写上一本书。当我需要将将news.asp?id=234的映射成news/234.html时,只需设置:RewriteRule /news/(d+).html /news.asp?id=$1 N,I这样就把 /news/234.html 这样的请求映射成了 /news.asp?id=234当有对/news/234.html的请求时:web服务器会把实际请求转发给/news.asp?id=234而在IIS也有相应的REWRITE模块:比如ISAPI REWRITE和IIS REWRITE,语法都是基于正则表达式,因此配置几乎和apache的mod_rewrite是相同的:比对于某一个简单应用可以是:RewriteRule /news/(d+).html /news/news.php?id=$1 N,I这样就把 /news/234.html 映射到了 /news/news.php?id=234一个更通用的能够将所有的动态页面进行参数映射的表达式是:把 /foo.php?a=A&b=B&c=C 表现成 /foo.php/a/A/b/B/c/C。RewriteRule (.*?.php)(?/*)?/(/*)/(/*)(.+?)?$1(?2$2&:?)$3=$4?5$5: N,I 以下是针对phpBB的一个Apache mod_rewrite配置样例: RewriteEngine On RewriteRule /forum/topic_(.+).html$ /forum/viewtopic.php?t=$1 L RewriteRule /forum/forum_(.+).html$ /forum/viewforum.php?f=$1 L RewriteRule /forum/user_(.+).html$ /forum/profile.php?mode=viewprofile&u=$1 L这样设置后就可以通过topic_1234.html forum_2.html user_34.html这样的链接访问原来的动态页面了。通过URL REWRITE还有一些好处:mod_rewrite和isapirewrite基本兼容,但是还是有些不同,比如:isapirewrite中?需要转义成?,mod_rewrite不用,isapirewrite支持 d+ (全部数字),mod_rewrite不支持 隐藏后台实现:这在后台应用平台的迁移时非常有用:当从asp迁移到java平台时,对于前台用户来说,根本感受不到后台应用的变化; 简化数据校验:因为像(d+)这样的参数,可以有效的控制数字的格式甚至位数; 比如我们需要将应用从news.asp?id=234迁移成news.php?query=234时,前台的表现可以一直保持为 news/234.html。从实现应用和前台表现的分离:保持了URL的稳定性,而使用mod_rewrite甚至可以把请求转发到其他后台服务器上。基于PATH_INFO的URL美化Url美化的另外一个方式就是基于PATH_INFO:PATH_INFO是一个CGI 1.1的标准,经常发现很多跟在CGI后面的/value_1/value_2就是PATH_INFO参数:比如:/index.php/man/ls 中:$PATH_INFO = /man/lsPATH_INFO是CGI标准,因此PHP Servlet等都有的支持。比如Servlet中就有request.getPathInfo()方法。注意:/myapp/servlet/Hello/foo的 getPathInfo()返回的是/foo,而/myapp/dir/hello.jsp/foo的getPathInfo()将返回的 /hello.jsp,从这里你也可以知道jsp其实就是一个Servlet的PATH_INFO参数。ASP不支持PATH_INFO PHP中基于PATH_INFO的参数解析的例子如下:/注意:参数按/分割,第一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 80000-7:2019/Amd 1:2025 EN Quantities and units - Part 7: Light and radiation - Amendment 1
- 社工证考试题库及答案
- 校园小超市安全知识培训课件
- 工会相关考试试题及答案
- 校车碰撞测试题及答案
- 用公务员面试题及答案
- 公共外交面试题及答案
- 减灾中心面试题及答案
- 校园现金测试题及答案
- 2025年国能铜陵发电有限公司招聘考试笔试试题(含答案)
- 龙门吊警示教育
- 班主任培训:家校共育
- 《数据安全法》考试参考题库100题(含答案)
- 档案管理服务承诺书
- 胶原蛋白对皮肤的重要性
- 2025年绵阳燃气集团有限公司招聘笔试参考题库含答案解析
- 《石膏的护理》课件
- 护理法律相关案例分析
- 2025版《折弯机安全操作规程》全
- 孕期阴道炎的健康宣教
- DB32-T 4467-2023 南美白对虾小棚养殖尾水生态化处理技术规程
评论
0/150
提交评论