乐读窝

搜索引擎优化魔法书

乐读窝 > 科幻小说 > 搜索引擎优化魔法书

第35章

书籍名:《搜索引擎优化魔法书》    作者:姚志国


                                    

        比对于某一个简单应用可以是:

        RewriteRule  /news/  (\d+  )\.html  /news/news\.php\?id=$1  [N,I]

        这样就把    http://chedong/news/234.html  映射到了:

        http://chedong/news/news.php?id=234

        一个更通用的能够将所有的动态页面进行参数映射的表达式是:

        把http://myhost/foo.php?a=A&b=B&c=C

        表现成http://myhost/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  还有一些好处:

        隐藏后台实现    这在后台应用平台的迁移时非常有用:当从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            参数,比如:

        http://phpunixman.sourceforge/index.php/man/ls  中:$PATH_INFO  =  "/man/ls"

        PATH_INFO    是  CGI      标准,因此  PHP              Servlet  等都有的支持。比如  Servlet              中就有

        request.getPathInfo  ()方法。

        第76  页

        -----------------------  Page  85-----------------------

        搜索引擎优化魔法书  SEO  Magic  Book    浩维互动免费电子书  timev

        注意:/myapp/servlet/Hello/foo    的getPathInfo  ()返回的是/foo,而/myapp/dir/hello.jsp/foo

        的  getPathInfo  ()将返回的  /hello.jsp,从这里你也可以知道  jsp                      其实就是一个  Servlet          的

        PATH_INFO  参数。ASP  不支持PATH_INFO。

        PHP  中基于PATH_INFO  的参数解析的例子如下:

        注意:参数按"/"分割,第一个参数是空的:从/param1/param2    中解析出$param1  $param2

        这2  个参数。

        if  (  isset  ($_SERVER["PATH_INFO"])  )    {

        list  ($nothing,  $param1,  $param2)    =  explode  ('/',  $_SERVER["PATH_INFO"]);

        }

        如何隐蔽应用:例如    .php    的扩展名:

        在APACHE  中这样配置:

        ForceType  application/x-httpd-php

        如何更像静态页面:app_name/my/app.html?

        解析的PATH_INFO  参数的时候,把最后一个参数的最后  5  个字符“.html”截断即可。

        注意:APACHE2  中缺省是不允许PATH_INFO  的,需要设置  AcceptPathInfo  on

        特别是针对使用虚拟主机用户,无权安装和配置  mod_rewrite                                      的时候,PATH_INFO    往

        往就成了唯一的选择。

        OK,这样以后看见类似于http://example/article/234  这样的网页你就知道可能

        是    article/show.php?id=234  这个php  程序生成的动态网页,很多站点表面看上去可能有很多

        静态目录,其实很有可能都是使用  1,2  个程序实现的内容发布。比如很多WIKIWIKI  系统

        都使用了这个机制:整个系统就一个简单的  wiki    程序,而看上去的目录其实都是这个应用

        拿后面的地址作为参数的查询结果。

        利用基于MOD_REWRITE/PATH_INFO                  +    CACHE  服务器的解决方案对原有的动态发

        布系统进行改造,也可以大大降低旧有系统升级到新的内容管理系统的成本。并且方便了搜

        索引擎收录入索引。

        附:如何在IIS  上利用PHP  支持PATH_INFO

        PHP  的ISAPI  模式安装备忘:只试成    php-4.2.3-Win32

        解包目录

        php-4.2.3-Win32.zip  c:\php

        PHP.INI  初始化文件

        第77  页

        -----------------------  Page  86-----------------------

        搜索引擎优化魔法书  SEO  Magic  Book    浩维互动免费电子书  timev

        复制:c:\php\php.ini-dist  到    c:\winnt\php.ini

        配置文件关联

        按照install.txt  中的说明配置文件关联

        运行库文件

        复制    c:\php\php4ts.dll  到    c:\winnt\system32\php4ts.dll

        这样运行后:会发现php  把PATH_INFO  映射到了物理路径上

        Warning:  Unknown(C:\CheDong\Downloads\ariadne\www\test.php\path):  failed  to  create  stream:

        No  such  file  or  directory  in  Unknown  on  line  0

        Warning:  Unknown  ():  Failed  opening  'C:\CheDong\Downloads\ariadne\www\test.php\path'  for

        inclusion  (include_path='.;c:\php4\pear')    in  Unknown  on  line  0

        安装ariadne  的PATCH

        停止IIS  服务

        net  stop  iisadmin

        ftp://ftp.muze.nl/pub/ariadne/win/iis/php-4.2.3/php4isapi.dll

        覆盖原有的c:\php\sapi\php4isapi.dll

        注:

        ariadne  是一个基于PATH_INFO  的内容发布系统,

        PHP  4.3.2  RC2  中CGI  模式的PATH_INFO    已经修正,照常安装即可。