﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-学习--共同努力-随笔分类-搜索</title><link>http://www.blogjava.net/rendong/category/13805.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:17:11 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:17:11 GMT</pubDate><ttl>60</ttl><item><title>面向搜索引擎的内容管理系统（CMS）设计（转http://www.chedong.com/tech/cms.html）</title><link>http://www.blogjava.net/rendong/archive/2006/08/05/61942.html</link><dc:creator>rendong</dc:creator><author>rendong</author><pubDate>Sat, 05 Aug 2006 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/rendong/archive/2006/08/05/61942.html</guid><wfw:comment>http://www.blogjava.net/rendong/comments/61942.html</wfw:comment><comments>http://www.blogjava.net/rendong/archive/2006/08/05/61942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rendong/comments/commentRss/61942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rendong/services/trackbacks/61942.html</trackback:ping><description><![CDATA[作者： 车东 Email: chedongATbigfoot.com/chedongATchedong.com 
<p>写于：2003/03 最后更新： 
</p><p>版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明<br /><a href="http://www.best-code.com/favorite/articles/cms.html" tppabs="http://www.chedong.com/tech/cms.html"><font color="#002c99">http://www.chedong.com/tech/cms.html</font></a></p><p>关键词："content manage system" cms path_info cgi php cache squid 内容管理 mod_rewrite url rewrite 系统 缓存 Cacheable "Search engine friendly" </p><p>内容摘要：<br />你完全不必耐心的看到最后，本文主要说明的是在设计CMS时以下2点注意事项：<br /></p><ol><li>搜索引擎友好(Search engine Friendly)：基于PATH_INFO的参数解析使得动态网页在链接（URI）形式上更像静态的目录结构，大大方便网站内容被搜索引擎收录； 
</li><li>可缓存性（Cache Friendly）：CMS本身不要过多考虑“效率”问题，只要页面输出设计的比较Cacheable，效率问题可以通过更前端专业的缓存服务器解决。 </li></ol><p>后面附有一个简单的利用PATH_INFO机制 + <a href="javascript:if(confirm('http://www.squid-cache.org/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.squid-cache.org/'" tppabs="http://www.squid-cache.org/"><font color="#002c99">Squid</font></a>WEB加速模式实现PHP动态网页的静态发布的例子，比起那些能导出静态页面的大型发布系统这种轻量级的动态缓存解决方案只需对原有的动态发布系统做少量的修改，从而大大提高了原有内容发布系统的重用度。</p><h2><a name="friendly"></a>网站内容静态发布的重要性：Cacheable / Search Engine Friendly</h2><p>由于一个动态页面的速度往往会比静态页面慢2－10倍，因此对于一个访问量逐步向百万级发展的网站来说，访问速度很快成为一个瓶颈。除了优化内容发布系统的应用本身外，如果能把更新频率比较低的动态页面转存成静态网页来发布，速度上的提升效果将是显著的，而静态网页如果能被缓存在内存里，访问速度更会比原有动态网页有2－3个数量级的提高。<br /></p><p>在国外内容管理系统(CMS)已经是一个非常成熟的行业，能够真正支撑大访问的系统中静态页面输出和缓存系统几乎是必须的。<br /><span class="weblink">&lt;a href='http://www.best-code.com'&gt;www.best-code.com&lt;/a&gt;</span><br />此外随着互联网上的内容以惊人速度的增长也越来越突出了搜索引擎的重要性，如果网站想更好地被搜索引擎收录，网站设计除了面向用户友好（User Friendly）外，<a href="http://www.best-code.com/favorite/articles/google.html" tppabs="http://www.chedong.com/tech/google.html"><font color="#002c99">面向搜索引擎友好的设计也是非常重要的</font></a>。链接地址相对固定的静态网页比较适合搜索引擎索引，动态网页后面跟的参数灵活度很大，因此很多搜索引擎都往往会忽略动态页面，比如：对于news.php?day=22&amp;month=03&amp;year=2003，很多搜索引擎可能只索引news.php这个页面一次，更多其他参数的页面可能都会当成相似内容滤掉；<span style="FONT-STYLE: italic">我个人一直怀疑在搜索引擎中：即使是同样内容，静态页面往往也比动态网页的PageRank高。</span></p><p>因此，将动态页面转换成静态页面，无论从效率上还是面向搜索引擎友好上，都是一个门户级内容发布系统必须面对的问题。<br /></p><h2><a name="compare"></a>静态缓存和动态缓存的比较 </h2><p>静态页面的缓存可能有2种形式：</p><ol><li>静态缓存：是在新内容发布的同时就立刻生成相应内容的静态页面，比如：2003年3月22日，管理员通过后台内容管理界面录入一篇新闻后，就立刻生成http://www.chedong.com/tech/2003/03/22/001.html这个静态页面，并同步更新http://www.chedong.com/tech/index.html这个静态页面上的相关链接。<br /></li><li>动态缓存：是在新内容发布以后，并不预先生成相应的静态页面，直到对相应内容发出请求时，如果前台缓存服务器找不到相应缓存，就向后台内容管理服务器发出请求，后台系统会生成相应内容的静态页面，用户第一次访问页面时可能会慢一点，但是以后就是直接访问缓存了。<br />如果去ZDNet等国外网站会发现他们使用的基于<a href="javascript:if(confirm('http://www.vignette.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.vignette.com/'" tppabs="http://www.vignette.com/"><font color="#002c99">Vignette</font></a>内容管理系统都有这样的页面名称：0,22342566,300458.html。其实这里的0,22342566,300458就是用逗号分割开的多个参数：<br />第一次访问找不到页面后，相当于会在服务器端产生一个doc_type=0&amp;doc_id=22342566&amp;doc_template=300458的查询，<br />而查询结果会生成的缓存的静态页面：0,22342566,300458.html </li></ol><p>静态缓存的缺点：</p><ul><li>复杂的触发更新机制：这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说，页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中，在静态缓存模式中，每发一篇新文章，除了这篇新闻内容本身的页面外，还需要系统通过触发器生成多个新的相关静态页面，这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。 
</li><li>旧内容的批量更新： 通过静态缓存发布的内容，对于以前生成的静态页面的内容很难修改，这样用户访问旧页面时，新的模板根本无法生效。 </li></ul><p></p><p>在动态缓存模式中，内容管理系统只需要关心各个页面自身，而相关的其他页面链接能自动更新，从而大大减少了设计触发器设计的需要。</p>VIGNETTE的动态缓存虽然很好，但是一个系统如果设计得太全面其实也是有很大危险的：如果一个频道下文章很多：比如达到十万时，如果生成的静态页面都在一个目录下，对系统文件系统是一个极大的危害，因为一个目录下文件个数超过3000效率就会非常差，甚至连rm *时都会出现too many arguments错误。<br /><br />简单的说，一个好的内容管理系统应该包括：<br /><ol><li>输入：方便的内容录入，所见即所得的编辑界面，权限控制等…… 
</li><li>输出：方便的模板管理，缓存发布等……<br /></li></ol>设计或寻找这样一个系统如果考虑功能全面和高集成度，你会发现只有那些几十万$以上的专业内容发布系统才能你满足所有的需求。<br /><br />以前做应用的时候也用过一些方式：应用首次访问以后将生成的内容存成一个缓存文件，下次请求时从缓存目录中读取缓存文件，内容更新时，应用把内容从缓存目录中删掉，从而减少对数据库的访问。虽然这样做也能承载比较大的负载，但这样的内容管理和缓存一体的系统是很难分离的。<br /><br />如果换一个思路：通过一定的分工现内容管理和缓存机制2者的分离，你会发现无论哪一方面可选的余地都是非常大的。甚至有可能利用目前的已经是“功能”比较全面的内容管理系统，而让所有“效率”问题都由前台更专业，而且是很容易分布的缓存服务器解决：可以是通过开放源代码的SQUID做反相代理的WEB加速，可以是专门的缓存硬件设备，甚至是专业的缓存服务商。<br /><br />动态缓存必须有一个基于静态链接本身的参数解析过程，很多专业内容管理系统系统都是将参数解析机制做成了WEB服务器的模块实现的。 <br /><br />我们可以把以前的HTTP/GET方式的?key=value改为直接用/value1/value2的方式来传递，从而实现了动态页面的静态URL形式。而缓存只需要在前端加上一层CACHE服务器，比如：Squid。网站动态内容的动态缓存发布就可以实现了。<br /><p>按照这个机制实现的发布系统很好地体现了应用系统的分工：把复杂地内容管理系统分解成：内容输入和缓存这2个相对简单的系统实现。而中间的内容发布通过URL REWRITE或PATH_INFO解决动态页面的参数传递：</p><ul><li>后台：内容管理系统，专心的将内容发布做好，比如：复杂的工作流管理，复杂的模板规则等…… 
</li><li>前台：页面的缓存管理则可以使用缓存软件（比如前台80端口使用SQUID对后台8080的内容发布管理系统进行缓存），缓存硬件，甚至交给缓存服务商。<br /></li></ul><pre>______________________             ___________________<br />|Squid Software cache|             |F5 Hardware cache|<br />----------------------             -------------------<br />            \                    /<br />             \ ________________ /<br />               |ASP |JSP |PHP |<br />  PATH_INFO Based Content Manage System<br />               ----------------</pre><ol></ol><p></p><h2><a name="pathinfo"></a>把URI地址用作参数传递：URL REWRITE和PATH_INFO</h2><p>最近看到很多关于面向搜索引擎URL设计优化(URI Pretty)的文章，提到了很多利用一定机制将动态网页参数变成像静态网页的形式：<br />比如可以将：<a href="javascript:if(confirm('http://www.chedong.com/phpMan.php?mode=man&amp;parameter=ls  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/phpMan.php?mode=man&amp;parameter=ls'" tppabs="http://www.chedong.com/phpMan.php?mode=man&amp;parameter=ls"><font color="#002c99">http://www.chedong.com/phpMan.php?mode=man&amp;parameter=ls</font></a><br />变成：<a href="javascript:if(confirm('http://www.chedong.com/phpMan.php/man/ls  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/phpMan.php/man/ls'" tppabs="http://www.chedong.com/phpMan.php/man/ls"><font color="#002c99">http://www.chedong.com/phpMan.php/man/ls</font></a><br /></p><p>最简单的是基于各种WEB服务器中的URL重写转向（Rewrite）模块的URL转换：这样几乎可以不修改程序的实现将news.asp?id=234的映射成news/234.html</p><p>Apache上有一个模块（非缺省）：mod_rewrite：当然URL REWRITE的强大功能还远远不止于此。<br /></p><p>当我需要将将news.asp?id=234的映射成news/234.html时：只需设置：<br />RewriteRule /news/(\d+)\.html /news\.asp\?id=$1 [N,I]<br />这样就把 /news/234.html 映射成了 /news.asp?id=234<br />当有对/news/234.html的请求时：web服务器会把实际请求转发给/news.asp?id=234<br /></p><p>而在IIS也有相应的REWRITE模块：比如<a href="javascript:if(confirm('http://www.isapirewrite.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.isapirewrite.com/'" tppabs="http://www.isapirewrite.com/"><font color="#002c99">ISAPI REWRITE</font></a>和<a href="javascript:if(confirm('http://www.qwerksoft.com/products/iisrewrite/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.qwerksoft.com/products/iisrewrite/'" tppabs="http://www.qwerksoft.com/products/iisrewrite/"><font color="#002c99">IIS REWRITE</font></a>，语法都是基于正则表达式，因此语法是几乎相同的：</p><p>比对于某一个简单应用可以是：<br />RewriteRule /news/(\d+)? /news\.asp\?id=$1 [N,I]<br />这样就把 /news/234 映射到了 /news.asp?id=234<br /><br />如我需要把 http://www.myhost.com/foo.php?a=A&amp;b=B&amp;c=C 表现成 http://www.myhost.com/foo.php/a/A/b/B/c/C。而一个更通用的能够将所有的动态页面进行参数映射的表达式是：<br />RewriteRule (.*?\.php)(\?[^/]*)?/([^/]*)/([^/]*)(.+?)? $1(?2$2&amp;:\?)$3=$4?5$5: [N,I]<br /></p><p>通过URL REWRITE还有一个好处就是隐藏后台实现：<br />比如我们需要将应用从news.asp?id=234迁移成news.php?query=234时，前台的表现可以一直保持为news/234.html。从实现应用和前台表现的分离：保持了URL的稳定性，在实现后台应用平台的迁移时非常有用。使用mod_rewrite甚至可以把请求转发到其他后台服务器上：</p><p><br />另外一个方式就是基于PATH_INFO：<br />PATH_INFO是一个CGI 1.1的标准，所有直接跟在CGI或动态页面app.cgi后面的"/value_1/value_2"就是PATH_INFO参数：<br />比如<a href="javascript:if(confirm('http://www.chedong.com/phpMan.php/man/ls  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/phpMan.php/man/ls'" tppabs="http://www.chedong.com/phpMan.php/man/ls"><font color="#002c99">http://www.chedong.com/phpMan.php/man/ls</font></a>，中：$PATH_INFO = "/man/ls"<br /></p>PATH_INFO是CGI标准，因此PHP Servlet等都有比较好的支持。比如Servlet中就有request.getPathInfo()方法。<br /><span style="FONT-STYLE: italic">注意：/myapp/servlet/Hello/foo的getPathInfo()返回的是/foo，而/myapp/dir/hello.jsp/foo的getPathInfo()将返回的/hello.jsp，从这里你也可以知道jsp其实就是一个Servlet的PATH_INFO参数。ASP不支持PATH_INFO，</span><br /><br />PHP中基于PATH_INFO的参数解析的例子如下：<br />//注意：第一个参数是空的，参数按"/"分割<br />if ( isset($_SERVER["PATH_INFO"]) ) {<br />    list($nothing, $day, $id) = explode('/', $_SERVER["PATH_INFO"]);<br />}<br /><br />如何隐蔽应用：例如.php，的扩展名：<br />在APACHE中这样配置：<br />&lt;FilesMatch "^app_name$"&gt;<br />    ForceType application/x-httpd-php<br />&lt;/FilesMatch&gt;<br /><br />如何更像静态页面：app_name/my/app.html<br />解析的PATH_INFO参数的时候，把最后一个参数的最后5个字符“.html”截断即可。<br /><span style="FONT-STYLE: italic">注意：APACHE2中缺省是不允许PATH_INFO的，需要设置</span><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">AcceptPathInfo on</span><br /><br />特别是针对使用虚拟主机用户，无权安装和配置mod_rewrite的时候，PATH_INFO往往就成了唯一的选择。<br /><br />虽然通过修改设置SQUID也可以对带?的动态页面进行缓存，但为了方便搜索引擎收录索引，还是将参数改成PATH_INFO比较好。<br /><br />OK，这样以后看见类似于http://www.example.com/article/234这样的网页你就知道其实是article/show.php?id=234这个php程序生成的动态网页，很多站点表面看上去可能有很多静态目录，其实很有可能都是使用1，2个程序实现的内容发布。比如很多WIKIWIKI系统都使用了这个机制：整个系统就一个简单的wiki程序，而看上去的目录其实都是这个应用拿后面的地址作为参数的查询结果。<br /><br />利用基于MOD_REWRITE/PATH_INFO ＋ CACHE服务器的解决方案对原有的动态发布系统进行改造，也可以大大降低旧有系统升级到新的内容管理系统的成本。<br /><h2><a name="page"></a>面向缓存的页面设计</h2>让页面能够比较好的被缓存服务器缓存，必须在产生内容的WEB服务器上设置，让返回内容的HTTP HEADER中加入"Last-Modified"和"Expires"声明，比如：<br />Last-Modified: Wed, 14 May 2003 13:06:17 GMT<br />Expires: Fri, 13 Jun 2003 13:06:17 GMT<br />以允许前端SQUID服务器缓存：<br /><ul><li>页面必须包含Last-Modified: 标记，一般纯静态页面本身都会有Last-Modified信息，动态页面需要通过函数强制加上，比如PHP中：<br />    // always modified now<br />    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");<br /><br /></li><li>必须有Expires或Cache-Control: max-age标记设置页面的过期时间：<br />对于静态页面，通过apache的mod_expires根据页面的MIME类型设置缓存周期：比如图片缺省是1个月，HTML页面缺省是2天等。<br />&lt;IfModule mod_expires.c&gt; <br />    ExpiresActive on<br />    ExpiresByType image/gif "access plus 1 month"<br />    ExpiresByType text/css "now plus 2 day"<br />    ExpiresDefault "now plus 1 day"<br />&lt;/IfModule&gt;<br /><br />对于动态页面，则可以直接通过写入HTTP返回的头信息，比如对于新闻首页index.php可以是20分钟，而对于具体的一条新闻页面可能是1天后过期。比如：在php中加入了1个月后过期：<br />    // Expires one month later<br />    header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24 * 30). " GMT");<br /><br /></li><li>如果服务器端有基于HTTP的认证，必须有Cache-Control: public标记 </li></ul>ASP应用的缓存设计：<br />首先在公用的包含文件中(比如include.asp)加入以下公用函数：<br />&lt;%<br />' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)<br />Function DateToHTTPDate(ByVal OleDATE)<br />  Const GMTdiff = #08:00:00#<br />  OleDATE = OleDATE - GMTdiff<br />  DateToHTTPDate = engWeekDayName(OleDATE) &amp; _<br />    ", " &amp; Right("0" &amp; Day(OleDATE),2) &amp; " " &amp; engMonthName(OleDATE) &amp; _<br />    " " &amp; Year(OleDATE) &amp; " " &amp; Right("0" &amp; Hour(OleDATE),2) &amp; _<br />    ":" &amp; Right("0" &amp; Minute(OleDATE),2) &amp; ":" &amp; Right("0" &amp; Second(OleDATE),2) &amp; " GMT"<br />End Function <br /><br />Function engWeekDayName(dt)<br />    Dim Out<br />    Select Case WeekDay(dt,1)<br />        Case 1:Out="Sun"<br />        Case 2:Out="Mon"<br />        Case 3:Out="Tue"<br />        Case 4:Out="Wed"<br />        Case 5:Out="Thu"<br />        Case 6:Out="Fri"<br />        Case 7:Out="Sat"<br />    End Select<br />    engWeekDayName = Out<br />End Function<br /><br />Function engMonthName(dt)<br />    Dim Out<br />    Select Case Month(dt)<br />        Case 1:Out="Jan"<br />        Case 2:Out="Feb"<br />        Case 3:Out="Mar"<br />        Case 4:Out="Apr"<br />        Case 5:Out="May"<br />        Case 6:Out="Jun"<br />        Case 7:Out="Jul"<br />        Case 8:Out="Aug"<br />        Case 9:Out="Sep"<br />        Case 10:Out="Oct"<br />        Case 11:Out="Nov"<br />        Case 12:Out="Dec"<br />    End Select<br />    engMonthName = Out<br />End Function<br />%&gt;<br /><br />然后在具体的页面中，比如index.asp和news.asp的“最上面”加入以下代码：HTTP Header<br /><br />&lt;!--#include file="../include.asp"--&gt;<br />&lt;%<br />' set Page Last-Modified Header:<br />' Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)<br />Response.AddHeader "Last-Modified", DateToHTTPDate(Now())<br /><br />' The Page Expires in Minutes<br />Response.Expires = 60<br /><br />' Set cache control to externel applications<br />Response.CacheControl = "public"<br />%&gt;<br /><br />其中Response.Expires 是设置页面过期时间的：单位是分钟<br /><br />如何检查目前站点页面的可缓存性（Cacheablility）呢？可以参考以下2个站点上的工具：<br /><a href="javascript:if(confirm('http://www.ircache.net/cgi-bin/cacheability.py  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.ircache.net/cgi-bin/cacheability.py'" tppabs="http://www.ircache.net/cgi-bin/cacheability.py"><font color="#002c99">http://www.ircache.net/cgi-bin/cacheability.py</font></a><br /><h2><a name="site"></a>面向缓存的站点规划</h2>一个利用SQUID的Transparent对多个站点进行做WEB加速http acceleration方案：<br /><br />原先一个站点的规划可能是这样的：<br />200.200.200.207 www.chedong.com <br />200.200.200.208 news.chedong.com <br />200.200.200.209 bbs.chedong.com <br />200.200.200.205 images.chedong.com<br /><br />在SQUID模式下：所有站点都通过外部DNS指向到同一个IP：200.200.200.200/201这2台SQUID缓存服务器上（使用2台是为了冗余备份） <pre>                          _____________________   ________<br />www.chedong.com  请求  \ | Squid cache box     | |        |  / 192.168.0.4   www.chedong.com <br />news.chedong.com 请求   -| 200.200.200.200/201 |-|firewall| -  192.168.0.4   news.chedong.com <br />bbs.chedong.com  请求  / |   /etc/hosts        | |   box  |  \ 192.168.0.3   bbs.chedong.com<br />                          ---------------------   --------<br /></pre>编译和配置过程：<br /><ol><li>./configure --enable-referer-log --disable-internal-dns <br />--disable-internal-dns：禁用SQUID的DNS解析<br />--enable-referer-log：便于APACHE COMBINED格式日志生成<br /><br /></li><li>配置：<br />http_port 80<br />httpd_accel_host virtual<br />httpd_accel_port 8000<br />httpd_accel_uses_host_header on<br /><br /># accelerater my domain only<br />acl acceleratedHosts dstdom_regex chedong.com<br /># accelerater http protocol on port 80<br />acl acceleratedProtocol protocol HTTP<br />acl acceleratedPort port 80<br /># access arc<br />acl all src 0.0.0.0/0.0.0.0<br /><br /># Allow requests when they are to the accelerated machine AND to the<br /># right port with right protocol<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHosts <br />http_access allow all </li></ol>在/etc/hosts中：加入内部的DNS解析，比如：<br />192.168.0.4 www.chedong.com <br />192.168.0.4 news.chedong.com<br />192.168.0.3 bbs.chedong.com<br /><br />工作原理：<br />SQUID服务器上关闭了DNS解析，这样，请求外部过来时，设置SQUID根据/etc/hosts文件进行内部DNS解析。这样，服务器请求就可以转发到我们指定的内部地址上。<br /><br />使用SQUID的反相代理加速，我们不仅可以得到性能上的提升，而且还能获得额外的安全性和配置的灵活度：<br /><ul><li>配置灵活性提高：可以自己在内部服务器上控制后台服务器的DNS解析，当需要在服务器之间做迁移调整时，就不用大量修改外部DNS配置了，只需要修改内部DNS实现服务的调整。 
</li><li>数据安全性增加：所有后台服务器可以很方便的被保护在防火墙内。 
</li><li>后台应用设计复杂程度降低：原先为了效率常常需要建立专门的图片服务器images.chedong.com和负载比较高的应用服务器bbs.chedong.com分离，在SQUID加速模式中，所有前台请求都通过SQUID服务器：实际上就都是静态页面，这样，应用设计时就不用考虑图片和应用本身分离了，也大大降低了后台内容发布系统设计的复杂程度，由于数据和应用都存放在一起，也方便了文件系统的维护和管理。<br /></li></ul>小节：<br /><ul><li>大访问量的网站应尽可能将动态网页生成静态页面作为缓存发布，甚至对于搜索引擎这样的动态应用来说，缓存机制也是非常非常重要的。 
</li><li>利用PATH_INFO机制进行解析参数，实现动态网页链接的美化，方便搜索引擎的索引； 
</li><li>在动态页面中利用HTTP Header定义缓存更新策略。 
</li><li>利用缓存服务器获得额外的配置和安全性 
</li><li>日志非常重要：SQUID日志缺省不支持COMBINED日志，但REFERER日志对于站点分析非常重要，在GNU/Linux可以用以下方式生成：<br />pr -mJt access.log referer.log | awk '{print $1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10" \x22"$14"\x22 \x22"$11"\x22"}'  &gt; combined.log<br />  <span style="FONT-STYLE: italic">  -m merge</span><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">    -J join line</span><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">    -t omit header and footer</span></li></ul><h2>附1：SQUID性能测试试验</h2>phpMan.php是一个基于php的man page server，每个man page需要调用后台的man命令和很多页面格式化工具，系统负载比较高，提供了Cache Friendly的URL，以下是针对同样的页面的性能测试资料：<br />测试环境：Redhat 8 on Cyrix 266 / 192M Mem <br />测试程序：使用apache的ab(apache benchmark)：<br />测试条件：请求50次，并发50个连接<br />测试项目：直接通过apache 1.3 (80端口) vs squid 2.5(8000端口：加速80端口) <br /><br />测试1：无CACHE的80端口动态输出：<br />ab -n 100 -c 10 http://www.chedong.com:81/phpMan.php/man/kill/1<br />This is ApacheBench, Version 1.3d &lt;$Revision: 1.58 $&gt; apache-1.3<br />Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br />Copyright (c) 1998-2001 The Apache Group, http://www.apache.org/<br /><br />Benchmarking localhost (be patient).....done<br />Server Software:        Apache/1.3.23                                     <br />Server Hostname:        localhost<br />Server Port:            80<br /><br />Document Path:          /phpMan.php/man/kill/1<br />Document Length:        4655 bytes<br /><br />Concurrency Level:      5<br />Time taken for tests:   63.164 seconds<br />Complete requests:      50<br />Failed requests:        0<br />Broken pipe errors:     0<br />Total transferred:      245900 bytes<br />HTML transferred:       232750 bytes<br />Requests per second:    0.79 [#/sec] (mean)<br />Time per request:       6316.40 [ms] (mean)<br />Time per request:       1263.28 [ms] (mean, across all concurrent requests)<br />Transfer rate:          3.89 [Kbytes/sec] received<br /><br />Connnection Times (ms)<br />              min  mean[+/-sd] median   max<br />Connect:        0    29  106.1      0   553<br /><span style="COLOR: rgb(255,0,0)">Processing:  2942  6016 1845.4   6227 10796</span><br style="COLOR: rgb(255,0,0)" /><span style="COLOR: rgb(255,0,0)">Waiting:     2941  5999 1850.7   6226 10795</span><br style="COLOR: rgb(255,0,0)" /><span style="COLOR: rgb(255,0,0)">Total:       2942  6045 1825.9   6227 10796</span><br /><br />Percentage of the requests served within a certain time (ms)<br />  50%   6227<br />  66%   7069<br />  75%   7190<br />  80%   7474<br />  90%   8195<br />  95%   8898<br />  98%   9721<br />  99%  10796<br /> 100%  10796 (last request)<br /><br />测试2：SQUID缓存输出<br />/home/apache/bin/ab -n50 -c5 "http://localhost:8000/phpMan.php/man/kill/1"<br />This is ApacheBench, Version 1.3d &lt;$Revision: 1.58 $&gt; apache-1.3<br />Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br />Copyright (c) 1998-2001 The Apache Group, http://www.apache.org/<br /><br />Benchmarking localhost (be patient).....done<br />Server Software:        Apache/1.3.23                                     <br />Server Hostname:        localhost<br />Server Port:            8000<br /><br />Document Path:          /phpMan.php/man/kill/1<br />Document Length:        4655 bytes<br /><br />Concurrency Level:      5<br />Time taken for tests:   4.265 seconds<br />Complete requests:      50<br />Failed requests:        0<br />Broken pipe errors:     0<br />Total transferred:      248043 bytes<br />HTML transferred:       232750 bytes<br />Requests per second:    11.72 [#/sec] (mean)<br />Time per request:       426.50 [ms] (mean)<br />Time per request:       85.30 [ms] (mean, across all concurrent requests)<br />Transfer rate:          58.16 [Kbytes/sec] received<br /><br />Connnection Times (ms)<br />              min  mean[+/-sd] median   max<br />Connect:        0     1    9.5      0    68<br /><span style="COLOR: rgb(255,0,0)">Processing:     7    83  537.4      7  3808</span><br style="COLOR: rgb(255,0,0)" /><span style="COLOR: rgb(255,0,0)">Waiting:        5    81  529.1      6  3748</span><br style="COLOR: rgb(255,0,0)" /><span style="COLOR: rgb(255,0,0)">Total:          7    84  547.0      7  3876</span><br /><br />Percentage of the requests served within a certain time (ms)<br />  50%      7<br />  66%      7<br />  75%      7<br />  80%      7<br />  90%      7<br />  95%      7<br />  98%      8<br />  99%   3876<br /> 100%   3876 (last request)<br /><br />结论：No Cache / Cache = 6045 / 84 = 70<br />结论：对于可能被缓存请求的页面，服务器速度可以有2个数量级的提高，因为SQUID是把缓存页面放在内存里的（因此几乎没有硬盘I/O操作）。<br /><br /><h2>附2：一个CACHE多主机APACHE服务的SQUID安装配置：</h2>squid的编译：<br />./configure --enable-useragent-log  --enable-referer-log --enable-default-err-language=Simplify_Chinese --enable-err-languages="Simplify_Chinese English" --disable-internal-dns  <br />make<br />#make install<br />#cd /usr/local/squid<br />make dir cache<br />chown squid.squid *<br />vi /usr/local/squid/etc/squid.conf<br /><br />---------------------cut here----------------------------------<br /># visible name<br />visible_hostname cache.example.com<br /><br /># cache config: space use 1G and memory use 256M<br />cache_dir ufs /usr/local/squid/cache 1024 16 256 <br />cache_mem 256 MB<br />cache_effective_user squid<br />cache_effective_group squid<br /><br /><br />http_port 80<br />httpd_accel_host virtual<br />httpd_accel_single_host off<br />httpd_accel_port 80<br />httpd_accel_uses_host_header on<br />httpd_accel_with_proxy on<br /><br /># accelerater my domain only<br />acl acceleratedHostA dstdomain .example1.com<br />acl acceleratedHostB dstdomain .example2.com<br />acl acceleratedHostC dstdomain .example3.com<br /># accelerater http protocol on port 80<br />acl acceleratedProtocol protocol HTTP<br />acl acceleratedPort port 80<br /># access arc<br />acl all src 0.0.0.0/0.0.0.0<br /><br /># Allow requests when they are to the accelerated machine AND to the<br /># right port with right protocol<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHostA<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHostB<br />http_access allow acceleratedProtocol acceleratedPort acceleratedHostC<br /><br /># logging<br />emulate_httpd_log on<br />referer_log /usr/local/squid/var/logs/referer.log<br />useragent_log /usr/local/squid/var/logs/agent.log<br /><br /><br />----------------------cut here---------------------------------<br /><br />创建缓存目录：<br />/usr/local/squid/sbin/squid -z<br /><br />启动squid<br />/usr/local/squid/sbin/squid<br /><br />停止squid：<br />/usr/local/squid/sbin/squid -k shutdown<br /><br />启用新配置：<br />/usr/local/squid/sbin/squid -k reconfig<br /><br />通过crontab每天0点截断/轮循日志：<br />0 0 * * * (/usr/local/squid/sbin/squid -k rotate) <br /><br /><h2>附3：如何在IIS上利用PHP支持PATH_INFO</h2>PHP的ISAPI模式安装备忘：只试成 php-4.2.3-Win32<br /><br />解包目录<br />========<br />php-4.2.3-Win32.zip c:\php<br /><br />PHP.INI初始化文件<br />=================<br />复制：c:\php\php.ini-dist 到 c:\winnt\php.ini<br /><br />配置文件关联<br />============<br />按照install.txt中的说明配置文件关联<br /><br />运行库文件<br />==========<br />复制 c:\php\php4ts.dll 到 c:\winnt\system32\php4ts.dll<br /><br />这样运行后：会发现php把PATH_INFO映射到了物理路径上<br />Warning: Unknown(C:\CheDong\Downloads\ariadne\www\test.php\path): failed to create stream: No such file or directory in Unknown on line 0<br /><br />Warning: Unknown(): Failed opening 'C:\CheDong\Downloads\ariadne\www\test.php\path' for inclusion (include_path='.;c:\php4\pear') in Unknown on line 0<br /><br />安装ariadne的PATCH<br />==================<br />停止IIS服务<br />net stop iisadmin<br />ftp://ftp.muze.nl/pub/ariadne/win/iis/php-4.2.3/php4isapi.dll<br />覆盖原有的c:\php\sapi\php4isapi.dll<br /><br />注：ariadne是一个基于PATH_INFO的内容发布系统<br /><br />PHP 4.3.2 RC2中CGI模式的PATH_INFO已经修正，照常安装即可。<br /><a class="weblink" href="http://www.best-code.com/"><font color="#002c99">www.best-code.com</font></a><br /><p>参考资料：<br /></p><p>CMS行业观察<br /><a href="javascript:if(confirm('http://www.cmswatch.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.cmswatch.com/'" tppabs="http://www.cmswatch.com/"><font color="#002c99">http://www.cmswatch.com</font></a><br /></p><p>CMS讨论邮件列表<br /><a href="javascript:if(confirm('http://www.cms-list.org/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.cms-list.org/'" tppabs="http://www.cms-list.org/"><font color="#002c99">http://www.cms-list.org</font></a><br /></p><p>一个基于PATH_INFO的开源内容管理系统<br /><a href="javascript:if(confirm('http://typo3.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://typo3.com/'" tppabs="http://typo3.com/"><font color="#002c99">http://typo3.com/</font></a></p><p>商业的和开源CMS项目列表：<br /><a href="javascript:if(confirm('http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/'" tppabs="http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/"><font color="#002c99">http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/</font></a><br /></p><p>搜索引擎友好的URL设计<br /><a href="javascript:if(confirm('http://www.sitepoint.com/article/485  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.sitepoint.com/article/485'" tppabs="http://www.sitepoint.com/article/485"><font color="#002c99">http://www.sitepoint.com/article/485</font></a><br />说不定这个URL原来就是articel.php?id=485<br /></p><p>HTTP代理缓存<br /><a href="javascript:if(confirm('http://vancouver-webpages.com/proxy.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://vancouver-webpages.com/proxy.html'" tppabs="http://vancouver-webpages.com/proxy.html"><font color="#002c99">http://vancouver-webpages.com/proxy.html</font></a></p><p>可缓存的页面设计<br /><a href="javascript:if(confirm('http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html'" tppabs="http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html"><font color="#002c99">http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html</font></a><br /></p><p>相关RFC文档：<br /></p><ul><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616.html'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616.html"><font color="#002c99">RFC 2616</font></a>: 
<ul><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13"><font color="#002c99">section 13</font></a> (Caching) 
</li><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9"><font color="#002c99">section 14.9</font></a> (Cache-Control header) 
</li><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21"><font color="#002c99">section 14.21</font></a> (Expires header) 
</li><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32"><font color="#002c99">section 14.32</font></a> (Pragma: no-cache) is important if you are interacting with HTTP/1.0 caches 
</li><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.29'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.29"><font color="#002c99">section 14.29</font></a> (Last-Modified) is the most common validation method 
</li><li><a href="javascript:if(confirm('http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11'" tppabs="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11"><font color="#002c99">section 3.11</font></a> (Entity Tags) covers the extra validation method </li></ul></li></ul><p></p><p>可缓存性检查：<br /><a href="javascript:if(confirm('http://www.web-caching.com/cacheability.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.web-caching.com/cacheability.html'" tppabs="http://www.web-caching.com/cacheability.html"><font color="#002c99">http://www.web-caching.com/cacheability.html</font></a><br /></p><p>URL Rewrite文档：<br /><a href="javascript:if(confirm('http://www.isapirewrite.com/docs/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.isapirewrite.com/docs/'" tppabs="http://www.isapirewrite.com/docs/"><font color="#002c99">http://www.isapirewrite.com/docs/</font></a><br /><a href="javascript:if(confirm('http://httpd.apache.org/docs/mod/mod_rewrite.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://httpd.apache.org/docs/mod/mod_rewrite.html'" tppabs="http://httpd.apache.org/docs/mod/mod_rewrite.html"><font color="#002c99">http://httpd.apache.org/docs/mod/mod_rewrite.html</font></a><br /><a href="javascript:if(confirm('http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html'" tppabs="http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html"><font color="#002c99">http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html</font></a><br /></p><p>原文出处：&lt;a href="http://www.chedong.com/tech/cms.html"&gt;http://www.chedong.com/tech/cms.html&lt;/a&gt;<br /></p><img src ="http://www.blogjava.net/rendong/aggbug/61942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rendong/" target="_blank">rendong</a> 2006-08-05 15:02 <a href="http://www.blogjava.net/rendong/archive/2006/08/05/61942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 什么是robots.txt文件? （转www.best-code.com ）</title><link>http://www.blogjava.net/rendong/archive/2006/08/05/61937.html</link><dc:creator>rendong</dc:creator><author>rendong</author><pubDate>Sat, 05 Aug 2006 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/rendong/archive/2006/08/05/61937.html</guid><wfw:comment>http://www.blogjava.net/rendong/comments/61937.html</wfw:comment><comments>http://www.blogjava.net/rendong/archive/2006/08/05/61937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rendong/comments/commentRss/61937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rendong/services/trackbacks/61937.html</trackback:ping><description><![CDATA[1.  什么是robots.txt文件? <br />        搜索引擎通过一种程序robot（又称spider），自动访问互联网上的网页并获取网页信息。 <br />        您可以在您的网站中创建一个纯文本文件robots.txt，在这个文件中声明该网站中不想被robot访问的部分，这样，该网站的部分或全部内容就可以不被搜索引擎收录了，或者指定搜索引擎只收录指定的内容。 <br /><span class="weblink">&lt;a href='http://www.best-code.com'&gt;www.best-code.com&lt;/a&gt;</span><br />         <br />    2.  robots.txt文件放在哪里? <br />        robots.txt文件应该放在网站根目录下。举例来说，当  robots访问一个网站（比如http://www.abc.com）时，首先会检查该网站中是否存在http:  //www.abc.com/robots.txt这个文件，如果机器人找到这个文件，它就会根据这个文件的内容，来确定它访问权限的范围。 <br />        网站  URL        相应的  robots.txt的  URL <br />        http://www.w3.org/        http://www.w3.org/robots.txt <br />        http://www.w3.org:80/        http://www.w3.org:80/robots.txt <br />        http://www.w3.org:1234/        http://www.w3.org:1234/robots.txt <br />        http://w3.org/        http://w3.org/robots.txt <br /><br />         <br />    3.  robots.txt文件的格式 <br />        "robots.txt"文件包含一条或更多的记录，这些记录通过空行分开（以CR,CR/NL,  or  NL作为结束符），每一条记录的格式如下所示： <br />        "&lt;field&gt;:&lt;optionalspace&gt;&lt;value&gt;&lt;optionalspace&gt;"。 <br /><br />        在该文件中可以使用#进行注解，具体使用方法和UNIX中的惯例一样。该文件中的记录通常以一行或多行User-agent开始，后面加上若干Disallow行,详细情况如下： <br /><br />        User-agent: <br />        　　该项的值用于描述搜索引擎robot的名字，在"robots.txt"文件中，如果有多条User-agent记录说明有多个robot会受到该协议的限制，对该文件来说，至少要有一条User-agent记录。如果该项的值设为*，则该协议对任何机器人均有效，在"robots.txt"文件中，  "User-agent:*"这样的记录只能有一条。 <br /><br />        Disallow: <br />        　　该项的值用于描述不希望被访问到的一个URL，这个  URL可以是一条完整的路径，也可以是部分的，任何以Disallow开头的URL均不会被robot访问到。例如"Disallow:/help"对  /help.html  和/help/index.html都不允许搜索引擎访问，而"Disallow:/help/"则允许robot访问/help.html，而不能访问  /help/index.html。任何一条Disallow记录为空，说明该网站的所有部分都允许被访问，在"/robots.txt"文件中，至少要有一条Disallow记录。如果"/robots.txt"是一个空文件，则对于所有的搜索引擎robot，该网站都是开放的。 <br /><br />    4.  robots.txt文件用法举例 <br />        例1.  禁止所有搜索引擎访问网站的任何部分        User-agent:  * <br />        Disallow:  / <br />        例2.  允许所有的robot访问  (或者也可以建一个空文件  "/robots.txt"  file)        User-agent:  * <br />        Disallow: <br />        例3.  禁止某个搜索引擎的访问        User-agent:  BadBot <br />        Disallow:  / <br />        例4.  允许某个搜索引擎的访问        User-agent:  baiduspider <br />        Disallow: <br /><br />        User-agent:  * <br />        Disallow:  / <br />        例5.一个简单例子 <br />        　　在这个例子中，该网站有三个目录对搜索引擎的访问做了限制，即搜索引擎不会访问这三个目录。 <br />        　　需要注意的是对每一个目录必须分开声明，而不要写成  "Disallow:  /cgi-bin/  /tmp/"。 <br />        　　User-agent:后的*具有特殊的含义，代表"any  robot"，所以在该文件中不能有"Disallow:  /tmp/*"  or  "Disallow:*.gif"这样的记录出现.        User-agent:  * <br />        Disallow:  /cgi-bin/ <br />        Disallow:  /tmp/ <br />        Disallow:  /~joe/ <br />         <br /><br />    5.  robots.txt文件参考资料 <br />        robots.txt文件的更具体设置,请参看以下链接： <br />        ·  Web  Server  Administrator's  Guide  to  the  Robots  Exclusion  Protocol <br />        ·  HTML  Author's  Guide  to  the  Robots  Exclusion  Protocol <br />        ·  The  original  1994  protocol  description,  as  currently  deployed <br />        ·  The  revised  Internet-Draft  specification,  which  is  not  yet  completed  or  implemented <br />    6.  各搜索引擎的robot   <br />        Google：Crawled  by  Googlebot/2.1  (+http://www.google.com/bot.html) <br />         <br />        Baidu：Crawled  by  Baiduspider+(+http://www.baidu.com/search/spider.htm) <br /><br />        Yahoo：Crawled  by  Mozilla/5.0  (compatible;  Yahoo!  Slurp  China <br /><br />        MSN：  Crawled  by  msnbot/1.0  (+http://search.msn.com/msnbot.htm) <br /><br />        Sogou：  Crawled  by  sogou  spider <br /><br />        中搜：Crawled  by  User-Agent:  Mozilla/4.0  (compatible;  MSIE  5.5;  Windows  NT  5.0) <br /><a class="weblink" href="http://www.best-code.com/"><font color="#002c99">www.best-code.com</font></a><br />        sina：Crawled  by  Mozilla/4.0(compatible;MSIE  6.0;Windows  NT  5.0;.NET  CLR  1.1.432) <br /><img src ="http://www.blogjava.net/rendong/aggbug/61937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rendong/" target="_blank">rendong</a> 2006-08-05 14:54 <a href="http://www.blogjava.net/rendong/archive/2006/08/05/61937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Meta的用法 （转http://www.best-code.com/favorite/articles/81.aspx）</title><link>http://www.blogjava.net/rendong/archive/2006/08/05/61936.html</link><dc:creator>rendong</dc:creator><author>rendong</author><pubDate>Sat, 05 Aug 2006 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/rendong/archive/2006/08/05/61936.html</guid><wfw:comment>http://www.blogjava.net/rendong/comments/61936.html</wfw:comment><comments>http://www.blogjava.net/rendong/archive/2006/08/05/61936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rendong/comments/commentRss/61936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rendong/services/trackbacks/61936.html</trackback:ping><description><![CDATA[关于Meta的用法 <br /><span class="weblink">&lt;a href='http://www.best-code.com'&gt;www.best-code.com&lt;/a&gt;</span><br />meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta  标签用于网页的&lt;head&gt;与&lt;/head&gt;中，meta  标签的用处很多。meta  的属性有两种：name和http-equiv。name属性主要用于描述网页，对应于content（网页内容），以便于搜索引擎机器人查找、分类（目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类）。这其中最重要的是description（站点在搜索引擎上的描述）和keywords（分类关键词），所以应该给每页加一个meta值。比较常用的有以下几个: <br /><br />name  属性 <br /><br />　　  1、&lt;meta  name="generator"  contect=""&gt;用以说明生成工具（如Microsoft  FrontPage  4.0）等； <br /><br />　　  2、&lt;meta  name="keywords"  contect=""&gt;向搜索引擎说明你的网页的关键词； <br /><br />　　  3、&lt;meta  name="description"  contect=""&gt;告诉搜索引擎你的站点的主要内容； <br /><br />　　  4、&lt;meta  name="author"  contect="你的姓名"&gt;告诉搜索引擎你的站点的制作的作者； <br /><br />　　  5、&lt;meta  name="robots"  contect="all|none|index|noindex|follow|nofollow"&gt; <br /><br />　　其中的属性说明如下： <br /><br />　　设定为all：文件将被检索，且页面上的链接可以被查询； <br /><br />　　设定为none：文件将不被检索，且页面上的链接不可以被查询； <br /><br />　　设定为index：文件将被检索； <br /><br />　　设定为follow：页面上的链接可以被查询； <br /><br />　　设定为noindex：文件将不被检索，但页面上的链接可以被查询； <br /><br />　　设定为nofollow：文件将不被检索，页面上的链接可以被查询。 <br /><br />http-equiv属性 <br /><br />　　  1、&lt;meta  http-equiv="Content-Type"  contect="text/html";charset=gb_2312-80"&gt; <br /><br />　　和  &lt;meta  http-equiv="Content-Language"  contect="zh-CN"&gt;用以说明主页制作所使用的文字以及语言； <br /><br />　　又如英文是ISO-8859-1字符集，还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集； <br /><br />　　  2、&lt;meta  http-equiv="Refresh"  contect="n;url=http://yourlink"&gt;定时让网页在指定的时间n内，跳转到页面http;//yourlink； <br /><br />　　  3、&lt;meta  http-equiv="Expires"  contect="Mon,12  May  2001  00:20:00  GMT"&gt;可以用于设定网页的到期时间，一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式； <br /><br />　　  4、&lt;meta  http-equiv="Pragma"  contect="no-cache"&gt;是用于设定禁止浏览器从本地机的缓存中调阅页面内容，设定后一旦离开网页就无法从Cache中再调出； <br /><br />　　  5、&lt;meta  http-equiv="set-cookie"  contect="Mon,12  May  2001  00:20:00  GMT"&gt;cookie设定，如果网页过期，存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式； <br /><br />　　  6、&lt;meta  http-equiv="Pics-label"  contect=""&gt;网页等级评定，在IE的internet选项中有一项内容设置，可以防止浏览一些受限制的网站，而网站的限制级别就是通过meta属性来设置的； <br /><br />　　  7、&lt;meta  http-equiv="windows-Target"  contect="_top"&gt;强制页面在当前窗口中以独立页面显示，可以防止自己的网页被别人当作一个frame页调用； <br /><br />　　  8、&lt;meta  http-equiv="Page-Enter"  contect="revealTrans(duration=10,transtion=50)"&gt;和&lt;meta  http-equiv="Page-Exit"  contect="revealTrans(duration=20，transtion=6)"&gt;设定进入和离开页面时的特殊效果，这个功能即FrontPage中的“格式/网页过渡”，不过所加的页面不能够是一个frame页面。 <br /><br />关于robots.txt的讲解 <br /><br />1.什么是robots.txt文件?   <br />搜索引擎通过一种程序robot（又称spider），自动访问互联网上的网页并获取网页信息。   <br />您可以在您的网站中创建一个纯文本文件robots.txt，在这个文件中声明该网站中不想被robot访问的部分，这样，该网站的部分或全部内容就可以不被搜索引擎收录了，或者指定搜索引擎只收录指定的内容。 <br /><br />2.robots.txt文件放在哪里?   <br />robots.txt文件应该放在网站根目录下。举例来说，当robots访问一个网站（比如http://www.abc.com）时，首先会检查该网站中是否存在http://www.abc.com/robots.txt  这个文件，如果机器人找到这个文件，它就会根据这个文件的内容，来确定它访问权限的范围。 <br /><br /><br />1.robots.txt文件的格式?   <br /><br />"robots.txt"文件包含一条或更多的记录，这些记录通过空行分开（以CR,CR/NL,  or  NL作为结束符），每一条记录的格式如下所示： <br />"&lt;field&gt;lt;optionalspace&gt;&lt;value&gt;&lt;optionalspace&gt;"。 <br /><br />在该文件中可以使用#进行注解，具体使用方法和UNIX中的惯例一样。该文件中的记录通常以一行或多行User-agent开始，后面加上若干Disallow行,详细情况如下： <br /><br />User-agent: <br />　　该项的值用于描述搜索引擎robot的名字，在"robots.txt"文件中，如果有多条User-agent记录说明有多个robot会受到该协议的限制，对该文件来说，至少要有一条User-agent记录。如果该项的值设为*，则该协议对任何机器人均有效，在"robots.txt"文件中，"User-agent:*"这样的记录只能有一条。 <br /><a class="weblink" href="http://www.best-code.com/"><font color="#002c99">www.best-code.com</font></a><br />Disallow: <br />　　该项的值用于描述不希望被访问到的一个URL，这个URL可以是一条完整的路径，也可以是部分的，任何以Disallow开头的URL均不会被robot访问到。例如"Disallow:/help"对/help.html  和/help/index.html都不允许搜索引擎访问，而"Disallow:/help/"则允许robot访问/help.html，而不能访问/help/index.html。任何一条Disallow记录为空，说明该网站的所有部分都允许被访问，在"/robots.txt"文件中，至少要有一条Disallow记录。如果"/robots.txt"是一个空文件，则对于所有的搜索引擎robot，该网站都是开放的。 <br /><img src ="http://www.blogjava.net/rendong/aggbug/61936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rendong/" target="_blank">rendong</a> 2006-08-05 14:52 <a href="http://www.blogjava.net/rendong/archive/2006/08/05/61936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用robots.txt的注意事项（转www.best-code.com ）</title><link>http://www.blogjava.net/rendong/archive/2006/08/05/61935.html</link><dc:creator>rendong</dc:creator><author>rendong</author><pubDate>Sat, 05 Aug 2006 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/rendong/archive/2006/08/05/61935.html</guid><wfw:comment>http://www.blogjava.net/rendong/comments/61935.html</wfw:comment><comments>http://www.blogjava.net/rendong/archive/2006/08/05/61935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rendong/comments/commentRss/61935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rendong/services/trackbacks/61935.html</trackback:ping><description><![CDATA[使用robots.txt的注意事项 <br /><span class="weblink">&lt;a href='http://www.best-code.com'&gt;www.best-code.com&lt;/a&gt;</span><br />robots.txt的创建很简单，只需设置User-agent与Disallow两项内容，其中User-agent项设置特定的搜索引擎Spider，Disallow项设定不允许Spider抓取和索引的内容。尽管如此，笔者却常常见一些设置不当的例子，在此把robots.txt有关的注意事项介绍一下： <br /><br />robots.txt文件 <br />　　robots.txt只能存放于网站的根目录下，置于除此之外的任何地方均不会被Spider发现。 <br /><br />　　每个网站，或每个域名（包括子域名），只能有一个robots.txt。 <br /><br />　　文件名“robots.txt”为小写字母，其他如Robots.txt或robots.Txt是不正确的，命名错误将会被Spider忽略。 <br /><br />　　正如上篇文章中介绍的，Spider在网站内找不到robots.txt时将会被重定向到404  错误页面，这便有可能阻碍Spider抓取和收录页面。虽然这并不一定会发生，但很多时候我们没必要冒这样的风险，一般来说，即使我们对网站的所有内容都没有限制，对所有的搜索引擎Spider  都欢迎，最好也在根目录下创建一个robots.txt文件： <br /><br />User-agent:  * <br />Disallow: <br /><br />robots.txt的语法规则 <br />　　在Disallow项中使用小写字母，即文件名和目录名使用小写字母，特别在对大小写敏感的Unix下更要注意。 <br /><br />　　robots.txt惟一支持的通配符是在User-agent使用的“*”，其代表所有的Spider。除此之外，别的通配符均不可用。这方面的错误常见于在文件名或目录名中使用通配符。 <br /><br />　　robots.txt的限定项 <br /><br />　　在User-agent和Disallow项的设定中，每行只允许有一个设定值，同时，注意不要有空行。至于行数，则没有限制，理论上说可以根据需要创建具有无数行的robots.txt。 <br /><br />　　下面即是一个错误的例子 <br /><br />User-agent:  * <br />Disallow:  /dir1/  /dir2/  /dir3/ <br /><br />　　正确设置应为： <br /><br />User-agent:  * <br />Disallow:  /dir1/ <br />Disallow:  /dir2/ <br />Disallow:  /dir3/ <br /><br />　　robots.txt中的文件与目录 <br /><br />　　既定某个文件拒绝索引时，格式为文件名(包括扩展名)，其后无“/”，而限定目录时，则需在目录名后加“/”。如下面的示例： <br /><br />User-agent:  * <br />Disallow:  /file.html <br />Disallow:  /dir/ <br /><br />　　特别注意的是，不要省略掉目录名后的“/”，不然，Spider便极有可能误读相应的设置。 <br /><br />　　robots.txt中限定项的顺序 <br /><br />　　请看下方的示例： <br /><br />User-agent:  * <br />Disallow:  / <br />User-agent:  Googlebot <br />Disallow: <br /><br />　　该设定本意是想允许Google访问所有页面，同时禁止其他Spider的访问。但在这样的设置下，Googlebot在读取前2行后便会离开网站，后面对其的“解禁”完全失去了意义。正确的格式应为： <br /><br />User-agent:  Googlebot <br />Disallow: <br />User-agent:  * <br />Disallow:  / <br /><br />　　robots.txt中的注释 <br /><br />　　尽管在robots.txt的标准中，可以在限定项的后面使用“#”添加注释，如下面的例子 <br /><br />User-agent:  Googlebot  #这是对Google的设置 <br />Disallow: <br /><br />　　但很多研究与测试表明，不少Spider对这样格式的解读存在问题。为确保其能更好地工作，最好采用如下设置： <br /><a class="weblink" href="http://www.best-code.com/"><font color="#002c99">www.best-code.com</font></a><br />#这是对Google的设置 <br />User-agent:  Googlebot <br />Disallow: <br /><img src ="http://www.blogjava.net/rendong/aggbug/61935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rendong/" target="_blank">rendong</a> 2006-08-05 14:50 <a href="http://www.blogjava.net/rendong/archive/2006/08/05/61935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何提高网站在Google中的排名（转http://www.chedong.com/tech/google.html"&gt;http://www.chedong.com/tech/google.html）</title><link>http://www.blogjava.net/rendong/archive/2006/08/05/61934.html</link><dc:creator>rendong</dc:creator><author>rendong</author><pubDate>Sat, 05 Aug 2006 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/rendong/archive/2006/08/05/61934.html</guid><wfw:comment>http://www.blogjava.net/rendong/comments/61934.html</wfw:comment><comments>http://www.blogjava.net/rendong/archive/2006/08/05/61934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rendong/comments/commentRss/61934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rendong/services/trackbacks/61934.html</trackback:ping><description><![CDATA[h1&gt;如何提高网站在Google中的排名<br />    ——面向搜索引擎的网站设计 
<h1></h1><p>作者： 车东 Email: chedongATbigfoot.com/chedongATchedong.com</p><p>写于：2003/01 最后更新：
<script language="JavaScript"><![CDATA[ocument.write(document.lastModified)]]&gt;</script>
 08/05/2006 14:47:05</p><p>版权声明：可以任意转载，转载时请务必以超链接形式标明文章原始出处和作者信息及本声明<br /><a href="http://www.best-code.com/favorite/articles/google.html" tppabs="http://www.chedong.com/tech/google.html"><font color="#002c99">http://www.chedong.com/tech/google.html</font></a></p><p>关键词：Google PageRank "link popularity" "website promotion" "optimization for search engine" </p><p>内容摘要：（注意：这个网站设计本身就利用了其中一些方法）。<br />网站设计中面向搜索引擎的优化注意事项：</p><ul><li><a href="http://www.best-code.com/favorite/articles/28.aspx#link"><font color="#002c99">链接引用的重要性；</font></a></li><li><a href="http://www.best-code.com/favorite/articles/28.aspx#key"><font color="#002c99">如何突出关键词：网页标题、主题的设计；</font></a></li><li><a href="http://www.best-code.com/favorite/articles/28.aspx#web"><font color="#002c99">页面及站点结构设计注意事项；</font></a></li><li><a href="http://www.best-code.com/favorite/articles/28.aspx#stat"><font color="#002c99">以及站点访问统计的重要性等；</font></a></li></ul><p>谁不想自己的网站在Google的搜索结果重排名靠前呢，但你的网站设计是Search Engine Ready的吗？</p><p><b>什么是PageRank</b></p><p>Google等新一带搜索引擎的优势之一在于不仅索引量很大，而且还将最好的结果排在搜索结果的最前面，具体的原理可以参考<a href="javascript:if(confirm('http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html'" tppabs="http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html"><font color="#002c99">Google の秘密 - PageRank 徹底解説</font></a>一文，PageRank简单的说类似于科技论文中的引用机制：谁的论文被引用次数多，谁就是权威。在互联网上PageRank就是基于网页中相互链接关系的分析得出的，由此引出第一个要点：</p><p><b><a name="link">链接就是一切</a></b></p><p>在互联网的海洋中，最重要的就是互联互通，不被其他网站引用的网站就是“信息孤岛”。“酒好也怕巷子深”，也许这话说起来有点像垃圾邮件广告，但事实就是这样。所以如果做网站的目的不是孤芳自赏，就需要积极的推广自己的网站。通过搜索引擎推广自己需要注意以下几个方面：</p><ol><li>以量取胜：不一定加入大型网站的分类目录才是网站推广，来自其他网站的任何反相链接都是有用的<br />网站推广比较经典的方式就是加入比较大型门户网站的分类目录，比如：<a href="javascript:if(confirm('http://www.yahoo.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.yahoo.com/'" tppabs="http://www.yahoo.com/"><font color="#002c99">Yahoo!</font></a>，<a href="javascript:if(confirm('http://dmoz.org/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://dmoz.org/'" tppabs="http://dmoz.org/"><font color="#002c99">dmoz.org</font></a>等。其实这里有一个误区：不一定非要加入大型网站的分类目录才是网站推广，因为现在搜索引擎已经不再只是网站目录的索引，而是更全面的网页索引，所以无论来自其他网站任何地方的反相链接都是非常有价值的，哪怕是出现在新闻报道，论坛，邮件列表归档中。因此在往很多大型站点的邮件列表发邮件时，一定注意在自己的签名中加上自己网站的地址。<br />Blogger（Weblog的简称）们也许最深刻地理解了“链接就是一切”这句话的含义，由于Blog的内容之间有大量的相互链接，因此最经常被引用的Blog页面在搜索引擎中的排名往往比一些大型商业网站的页面还要高。<br /></li><li>以质取胜：被PageRank高的网站引用能更快地提高PageRank<br />数量只是关键因素之一，来自PageRank高的页面的链接还能更快的提高被链接目标的PageRank，以我的个人网站为例：我没有加入任何分类目录，只是将一些文章投稿在了<a href="javascript:if(confirm('http://www.zdnet.com.cn/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.zdnet.com.cn/'" tppabs="http://www.zdnet.com.cn/"><font color="#002c99">ZDNet中国</font></a>上，由于页面上有文章出处链接，相应网页和网站整体的PageRank过了一段时间后就有了很大的提升。有时候被什么样的网站引用有时候比引用次数多更重要。这里我要特别感谢的是，当时<a href="javascript:if(confirm('http://www.zdnet.com.cn/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.zdnet.com.cn/'" tppabs="http://www.zdnet.com.cn/"><font color="#002c99">ZDNet中国</font></a>是唯一遵循了我的版权声明的要求表明了文章出处，并且有反相链接的网站。<br /></li><li>了解搜索引擎的"价值观"：<br /><a href="http://www.best-code.com/favorite/articles/lucene.html" tppabs="http://www.chedong.com/tech/lucene.html"><font color="#002c99">Lucene简介</font></a>这篇文章被<a href="javascript:if(confirm('http://jakarta.apache.org/lucene/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://jakarta.apache.org/lucene/'" tppabs="http://jakarta.apache.org/lucene/"><font color="#002c99">Jakarta.apache.org的lucene项目</font></a>引用以后，这篇文章就成为了所有页面中PageRank最高的页面（在<a href="javascript:if(confirm('http://toolbar.google.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://toolbar.google.com/'" tppabs="http://toolbar.google.com/"><font color="#002c99">Google工具栏</font></a>上显示是6/10），而Google深厚的学院气氛让我一直怀疑他们对 .edu等非功利站点有特别加分 :-)，毕竟.org .edu才代表了互联网精神的实质：知识的共享。<br />但更合理的解释是：.org很多都是开放技术平台的开发者，他们会在首页这样的地方加入Powered By Apache, Power by FreeBSD之类的链接表示对其他开源平台的尊重，所以象<a href="javascript:if(confirm('http://www.apache.org/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.apache.org/'" tppabs="http://www.apache.org/"><font color="#002c99">Apache</font></a>, <a href="javascript:if(confirm('http://www.php.net/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.php.net/'" tppabs="http://www.php.net/"><font color="#002c99">PHP</font></a>, <a href="javascript:if(confirm('http://www.freebsd.org/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.freebsd.org/'" tppabs="http://www.freebsd.org/"><font color="#002c99">FreeBSD</font></a>这样的开源站点在GOOGLE中都有非常高的PageRank。而在.edu这些站点中，很多都是学术性比较强的文档，以超链接形式标明参考文献的出处已经成为一种习惯，而这也无疑正是PageRank最好的依据。<br /><span style="FONT-STYLE: italic">注意：千万不要通过Link Farm提高自身的站点排名：Google会惩罚那些主动链接到Link Farm站点以提高自身排名站点，相应站点的页面将不会被收入到索引中。但如果你的页面被别的Link Farm链接了也不必担心，因为这种被动的链接是不会被惩罚的。</span><br /></li></ol><p>另外在推广自己网站之前也许首先需要了解自己网站目前在一些搜索引擎中的知名度，这里我做了个小工具可以用于这一目的：<br /><a href="javascript:if(confirm('http://www.chedong.com/linkPopCheck.php  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/linkPopCheck.php'" tppabs="http://www.chedong.com/linkPopCheck.php"><font color="#002c99">http://www.chedong.com/linkPopCheck.php</font></a>。<br />原理非常简单，可以参考如何评价网站的人气：<a href="http://www.best-code.com/favorite/articles/link_pop_check.html" tppabs="http://www.chedong.com/tech/link_pop_check.html"><font color="#002c99">http://www.chedong.com/tech/link_pop_check.html</font></a>一文。</p><p>网站推广只是手段，如何突出内容、让需要相关信息的用户能够尽快的找到你的网站才是目的，PageRank高并不代表像Yahoo!这样的门户站点就能，因为搜索引擎的结果是搜索关键词在页面中的匹配度和页面的PageRank相结合的排名结果。因此第二个要点：</p><p><a name="key"><b>如何突出关键词</b></a></p><ol><li>不要空着标题：空着&lt;title&gt;&lt;/title&gt;无异于浪费了最有价值的一块阵地；<br />传统的页面中，HTML页面中会有类似以下的隐含信息，用于说明当前网页的主要内容关键字：<br />&lt;header&gt;<br />    &lt;meta name="keyword" content="mp3 download music..."&gt;<br />&lt;/header&gt;<br />后来由于这种人工添加关键词的方式被滥用，大量网页中为了提高被搜索引擎命中的概率，经常添加一些和实际网页内容无关的热门关键比如：“music mp3 download”等，所以新一代的搜索引擎已经不再关心页面头文件中的人工meta keyword声明，而页面标题在搜索引擎的关键词的命中命中过程中往往有着更高的比重，如果一个关键词在标题中命中会比在页面中命中有更高的得分，从而在相应的搜索结果排名中更靠前。<br /></li><li>标题长度和内容：不要过长，一般在40个字符以内，并充分突出关键词的比重；<br />如果更长的标题搜索引擎一般会忽略掉，所以要尽可能将主要关键词放在标题靠前的位置。省略掉不必要的形容词吧，毕竟用户主要通过名词来找到需要的内容。标题内容：尽量用一些别人可以通过关键词找到的字眼（也别太过头，如果标题中的字眼超过1半内容中都没有，有可能被搜索引擎排除出索引），因此基于web日志中来自其他搜索引擎的关键词查询统计非常必要。<br /></li><li>如果网页很多的话，尽量使用不同的网页标题，争取让自己网站的内容更多的进入搜索引擎索引范围；<br />因为搜索引擎会根据页面内容的相似度把一些内容当成重复页面排除出索引范围；<br /><a href="javascript:if(confirm('http://www.chedong.com/phpMan.php  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/phpMan.php'" tppabs="http://www.chedong.com/phpMan.php"><font color="#002c99">http://www.chedong.com/phpMan.php</font></a>是我的网站上的一个小应用：一个web界面的unix命令手册（man page），在以前的设计中所有动态页面使用的都是同样的标题："phpMan: man page /perldoc /info page web interface" ，Google索引了大约3000多个页面，后来我将页面标题改成了"phpMan:  [命令名]"这样的格式，比如："phpMan: ls"，这样大部分动态页面的标题就都不一样了，一个月后Google从这个页面入口索引了大约6000个页面。因此，如果网站中很多网页都使用相同的标题，比如：“新闻频道”，“论坛”，这些页面中很大一部分就会被排重机制忽略掉。<br /></li><li>除了&lt;title&gt;&lt;/title&gt;外，还可以用&lt;h1&gt;&lt;/h1&gt;标题行突出内容主题，加强标题的效果；<br />在我的网站设计中：我会把用&lt;h1&gt;[标题]&lt;/h1&gt;这样的模板把标题突出显示，而不是通过改变字体的方式突出标题。 </li></ol><p><b><a name="web">其他网站设计提示</a></b></p><ol><li>尽量使用静态网页：目前能够像Google一样对动态网页进行索引的搜索引擎还比较少，而同样内容的动态网页其权重比静态网页也要低很多。因此无论从效率上讲还是方便搜索引擎收录，使用内容发布系统将网站内容发布成静态网页都是非常必要的。<br />比如：http://www.chedong.com/phpMan.php/man/intro/3<br />肯定比 http://www.chedong.com/phpMan.php?mode=man&amp;parameter=intro&amp;section=3<br />更容易进入搜索引擎的索引。而且在URL中的命中有时候比在标题中还能突出关键词。<br /></li><li>表现和内容的分离：“绿色”网页<br />网页中的javascript和css尽可能和网页分离，一方面提高代码重用度（也方便页面缓存），另外一方面，由于有效内容占网页长度的百分比高，也能提高相关关键词在页面中的比重。总之，应该鼓励遵循w3c的规范，使用更规范的XHTML和XML作为显示格式便于内容更长时间的保存。<br /></li><li>让所有的页面都有能够快速入口：<a href="javascript:if(confirm('http://www.chedong.com/sitemap.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/sitemap.html'" tppabs="http://www.chedong.com/sitemap.html"><font color="#002c99">站点地图</font></a>，方便网页爬虫（spider）快速遍历网站所有需要发布的内容。如果首页就是用Flash或图片进入的话，无异于将搜索引擎拒之门外，除了UI设计的用户友好外，spider friendly也是非常重要的。 
</li><li>保持网站自身的健康：经常利用<a href="javascript:if(confirm('http://home.snafu.de/tilman/xenulink.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://home.snafu.de/tilman/xenulink.html'" tppabs="http://home.snafu.de/tilman/xenulink.html"><font color="#002c99">坏链检查工具</font></a>检查网站中是否有死链。<br /></li><li>保持网页内容/链接的稳定性和持久性：在搜索引擎索引中网页存在的历史也是一个比较重要的因素，而且历史比较久的网页被链接的几率越高。为了保证自己网页能够被比较持久的被其他网站的页面引用，如果自己网页中有链接更新时，最好能保留旧的页面并做好链接转向，以保持内容的连续性。要知道，把一个网站和内容在搜索引擎中的排名“培养”的很高是一件非常不容易的事情，谁都不希望好不容易自己的内容被别人找到了，点击却是“404 页面不存在”吧，因此站点管理员对自身站点error.log的分析也是非常必要的。<br /></li><li>文件类型因素：Google有对PDF, Word(Power Point, Excel), PS文档的索引能力，由于这种文档的内容比一般的HTML经过了更多的整理，学术价值一般比较高，所以这些类型的文档天生就比一般的HTML类型的文档PageRank要高。因此，对于比较重要的文档：技术白皮书，FAQ，安装文档等建议使用PDF PS等高级格式存取，这样在搜索结果中也能获得比较靠前的位置。 
</li><li>“一人得道，鸡犬升天”：常常能发现门户站点的一条新闻往往比其他站点的首页排名还要靠前。因此一个站点总体PageRank提高了以后，往往自身一些并不重要的内容也会被同那些高PageRank的内容一起带入被搜索引擎优先查询的列表中。这点有些不是很合理，因为这样经常造成很多大站点的邮件列表归档往往比其他站点的首页PageRank还要高。 </li></ol><p><b><a name="stat">知己知彼——站点访问统计/日志分析挖掘的重要性</a></b></p><p>网站设计不仅仅只是被动的迎合搜索引擎的索引，更重要是充分利用搜索引擎带来的流量进行更深层次的用户行为分析。目前，来自搜索引擎关键词统计几乎是各种WEB日志分析工具的标准功能，相信商业日志统计工具在这方面应该会有更强化的实现。WEB日志统计这个功能如此重要，以至于新的RedHat 8中已经将日志分析工具webalizer作为标准的服务器配置应用之一。<br /></p>以Apache/webalizer为例，具体的做法如下： 
<ol><li>记录访问来源：<br />在Apache配置文件中设置日志格式为combined格式，这样的日志中会包含扩展信息：其中有一个字段就是相应访问的转向来源：HTTP_REFERER，如果用户是从某个搜索引擎的搜索结果中找到了你的网页并点击过来，日志中记录的HTTP_REFERER就是用户在搜索引擎结果页面的URL，这个URL中包含了用户查询的关键词。<br /></li><li>在webalizer中缺省配置针对搜索引擎的统计：如何提取HTTP_REFERER中的关键词<br />webalizer中缺省有针对yahoo, google等国际流行搜索引擎的查询格式：这里我增加了针对国内门户站点的搜索引擎参数设置<br />SearchEngine yahoo.com p=<br />SearchEngine altavista.com q=<br />SearchEngine google.com q=<br />SearchEngine    sina.com.cn word=<br />SearchEngine    baidu.com   word=<br />SearchEngine    sohu.com    word=<br />SearchEngine    163.com q=<br /></li></ol><p>通过这样设置webalizer统计时就会将HTTP_REFERER中来自搜索引擎的URL中的keyword提取出来，比如：所有来自google.com链接中，参数q的值都将被作为关键词统计下来：，从汇总统计结果中，就可以发现用户是根据什么关键词找到你的次数，以及找到你的用户最感兴趣的是那些关键词等，进一步的，在webalizer中有设置还可以将统计结果倒出成CSV格式的日志，便于以后导入数据库进行历史统计，做更深层次的数据挖掘等。</p><p>以前通过WEB日志的用户分析主要是简单的基于日志中的访问时间/IP地址来源等，很明显，基于搜索引擎关键词的统计能得到的分析结果更丰富、更直观。因此，搜索引擎服务的潜在商业价值几乎是不言而喻的，也许这也是<a href="javascript:if(confirm('http://www.yahoo.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.yahoo.com/'" tppabs="http://www.yahoo.com/"><font color="#002c99">Yahoo!</font></a><a href="javascript:if(confirm('http://www.av.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.av.com/'" tppabs="http://www.av.com/"><font color="#002c99">Altavista</font></a>等传统搜索引擎网站在门户模式后重新开始重视搜索引擎市场的原因，看看<a href="javascript:if(confirm('http://www.google.com/press/zeitgeist2002.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.google.com/press/zeitgeist2002.html'" tppabs="http://www.google.com/press/zeitgeist2002.html"><font color="#002c99">Google的年度关键词统计</font></a>就知道了，在互联网上有谁比搜索引擎更了解用户对什么更感兴趣呢？<br /></p><p>请看本站的反相链接统计：<a href="javascript:if(confirm('http://www.chedong.com/log/2003_2.log  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.chedong.com/log/2003_2.log'" tppabs="http://www.chedong.com/log/2003_2.log"><font color="#002c99">http://www.chedong.com/log/2003_2.log</font></a><br />需要注意的是：由于Google针对Windows 2000中的IE使用的是UTF-8方式的编码，因此很多统计有时候需要在UTF-8方式下查看才是正确字符显示。从统计中能够感受到：在使用水平比较高的IT开发人员中Google已经成为最常用的搜索引擎。而使用百度的用户也已经大大超过了传统的搜狐，新浪等门户站点，因此传统门户网站在搜索引擎上的优势将是非常脆弱的。而从技术的发展趋势来看，以后还会有更多的利用互联网媒体做更深层次数据挖掘的服务模式出现：<br /></p><p></p><p><a href="javascript:if(confirm('http://www.cnblog.org/blog  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.cnblog.org/blog#89372927'" tppabs="http://www.cnblog.org/blog#89372927"><span style="FONT-STYLE: italic"><font color="#002c99">转载自cnblog.org——“突发”文字可能揭示社会趋势</font></span></a><br style="FONT-STYLE: italic" /><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">在“新科学家”(New Scientist)在线杂志上，公布了康奈尔大学的一个新研究成果，引人注目，也许与Google 收购Pyra 的动机有关。</span><br style="FONT-STYLE: italic" /><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">这所大学的计算机科学家 Jon Klenberg 开发了一个计算机算法，能够识别一篇文章中某些文字的“突发”增长，而且他发现，这些“突发”增长的文字可以用来快速识别最新的趋势和热点问题，因此能够更有效地筛选重要信息。过去很多搜索技术都采用了简单计算文字/词组出现频率的方法，却忽略了文字使用增加的速率。</span><br style="FONT-STYLE: italic" /><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">Jon 特别指出，这种方法可以应用到大量Weblog上，以跟踪社会趋势，这对商业应用也很有潜力。例如，广告商可以从成千上万的个人Blog 中快速找到潜在的需求风尚。而且只要Blog 覆盖话题范围足够大（实际上发展趋势确实如此），这项技术对政治、社会、文化和经济等领域也都会有实际意义了。</span><br style="FONT-STYLE: italic" /><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">虽然Google 新闻的内部算法至今没有公开，但是人们猜测这种完全由机器所搜集的头条新闻应当不是Google搜索引擎中惯用的鸽子算法，很可能与这种“突发”判断算法有关。如此说来，Google收购Blog工具供应商的举动确实还有更深层次的远见了。</span><br style="FONT-STYLE: italic" /><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">- NewScientist.com news, <a href="javascript:if(confirm('http://www.newscientist.com/news/news.jsp?id=ns99993405  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.newscientist.com/news/news.jsp?id=ns99993405'" tppabs="http://www.newscientist.com/news/news.jsp?id=ns99993405"><font color="#002c99">Word 'bursts' may reveal online trends</font></a></span><br style="FONT-STYLE: italic" /><span style="FONT-STYLE: italic">- 还没有写完这些介绍，在 SlashDot 上也看到了很多有关这个发现的讨论</span><br /><span class="weblink">&lt;a href='http://www.best-code.com'&gt;www.best-code.com&lt;/a&gt;</span><br /></p><p>参考资料：</p><p>面向Google搜索引擎的网站设计优化<br /><a href="javascript:if(confirm('http://www.google-search-engine-optimization.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.google-search-engine-optimization.com/'" tppabs="http://www.google-search-engine-optimization.com/"><font color="#002c99">http://www.google-search-engine-optimization.com/</font></a></p><p>关于Google的十个神话：<br /><a href="javascript:if(confirm('http://www.promotionbase.com/printTemplate.php?aid=971  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.promotionbase.com/printTemplate.php?aid=971'" tppabs="http://www.promotionbase.com/printTemplate.php?aid=971"><font color="#002c99">http://www.promotionbase.com/printTemplate.php?aid=971</font></a><br /></p><p>如何评价一个网站的人气<br /><a href="http://www.best-code.com/favorite/articles/link_pop_check.html" tppabs="http://www.chedong.com/tech/link_pop_check.html"><font color="#002c99">http://www.chedong.com/tech/link_pop_check.html</font></a></p><p>如何提高网站在Google中的排名——面向搜索引擎的广告模式<br /><a href="http://www.best-code.com/favorite/articles/google_ads.html" tppabs="http://www.chedong.com/tech/google_ads.html"><font color="#002c99">http://www.chedong.com/tech/google_ads.html</font></a><br /></p><p>Measuring Link Popularity<br /><a href="javascript:if(confirm('http://searchenginewatch.com/webmasters/popularity.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://searchenginewatch.com/webmasters/popularity.html'" tppabs="http://searchenginewatch.com/webmasters/popularity.html"><font color="#002c99">http://searchenginewatch.com/webmasters/popularity.html</font></a></p><p>Google の秘密 - PageRank 徹底解説<br /><a href="javascript:if(confirm('http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html'" tppabs="http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html"><font color="#002c99">http://www.kusastro.kyoto-u.ac.jp/~baba/wais/pagerank.html<br /></font></a>这篇文章是在查"Google PageRank"的时候查到的，这篇文章不仅有一个算法说明，也是一个Google的weblog，记录了很多关于Google的新闻和一些市场动态信息。<br /></p><p>Google的海量处理机制：鸽子系统<br /><a href="javascript:if(confirm('http://www.google.com/technology/pigeonrank.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.google.com/technology/pigeonrank.html'" tppabs="http://www.google.com/technology/pigeonrank.html"><font color="#002c99">http://www.google.com/technology/pigeonrank.html</font></a><br /></p><p>WEB日值统计工具Webalizer<br /><a href="javascript:if(confirm('http://www.webalizer.org/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.webalizer.org/'" tppabs="http://www.webalizer.org/"><font color="#002c99">http://www.webalizer.org<br /></font></a></p><p>Robots的说明：<br /><a href="javascript:if(confirm('http://bar.baidu.com/robots/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://bar.baidu.com/robots/'" tppabs="http://bar.baidu.com/robots/"><font color="#002c99">http://bar.baidu.com/robots/</font></a><br /><a href="javascript:if(confirm('http://www.google.com/bot.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.google.com/bot.html'" tppabs="http://www.google.com/bot.html"><font color="#002c99">http://www.google.com/bot.html</font></a><br />搜索引擎通过一种程序robot（又称spider），自动访问互联网上的网页并获取网页信息。您可以在您的网站中创建一个纯文本文件robots.txt，在这个文件中声明该网站中哪些内容可以被robot访问，哪些不可以。<br /><a class="weblink" href="http://www.best-code.com/"><font color="#002c99">www.best-code.com</font></a><br />原文出处：&lt;a href="http://www.chedong.com/tech/google.html"&gt;http://www.chedong.com/tech/google.html&lt;/a&gt;<br /></p><img src ="http://www.blogjava.net/rendong/aggbug/61934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rendong/" target="_blank">rendong</a> 2006-08-05 14:49 <a href="http://www.blogjava.net/rendong/archive/2006/08/05/61934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>