精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
  • 让你的网站产生收益赚钱,有博客和网站的绝对不能错过
  • 将指定的流量带到你的网站,为你站增加有效的访客,为你提升业绩
  • PHP匹配变音使404页面更加智能化

    来源:网络整理 时间:07-11-05 点击: 点击这里收藏本文


    清单 2. buildMetaphoneList.pl
                   

    以下为引用的内容:
    #!/usr/bin/perl -w
    # buildMetaphoneList.pl - / split filename, 0 score, metaphones

    use strict;
    use File::Find;
    use Text::Metaphone;

    find(\&htmlOnly,".");

    sub htmlOnly
    {
      if( $File::Find::name =~ /\.html/ )
      {
        my $clipFname = $File::Find::name;
        $clipFname =~ s/\.html//g;

        my @slParts = split '/', $clipFname;
        shift(@slParts);

        print "$File::Find::name ### 0 ### ";
        for( @slParts ){ print Metaphone($_) . " " }
        print "\n";

      }#if a matching .html file

    }#htmlOnly sub

    buildMetaphoneList.pl 程序只能处理扩展名为 .html 的文件,它将移除文件名中的 .html,然后为完整路径名称的各个部分生成变音。将 buildMetaPhoneList.pl 程序复制到 Web 服务器的根目录下,然后运行命令 perl buildMetaphoneList.pl > metaphonesScore.txt。对于清单 1 中的文件,相应的 metaphonesScore.txt 文件内容如清单 3 所示。

    清单 3. metaphonesScore.txt
                   

    以下为引用的内容:
    ./index.html ### 0 ### INTKS
    ./survey.html ### 0 ### SRF
    ./search_tips.html ### 0 ### SRXTPS
    ./about.html ### 0 ### ABT
    ./how.html ### 0 ### H
    ./why.html ### 0 ### H
    ./who.html ### 0 ### H
    ./NathanHarrington.html ### 0 ### N0NHRNKTN
    ./blogs/NathanHarrington.html ### 0 ### BLKS N0NHRNKTN
    ./blogs/DaveSmith.html ### 0 ### BLKS TFSM0
    ./blogs/MarkCappel.html ### 0 ### BLKS MRKKPL

    清单 3 中的每一行文字都显示了 Web 服务器根目录下的实际链接、默认作用域和变音代码。注意,how.html、 why.html 和 who.html 都解析为了相同的变音代码。要解决这个不明确的地方,需要修改作用域字段,让链接建议程序以指定的顺序向页面提供链接。比如说,将 “H” 变音条目修改为:

    以下为引用的内容:
    ./how.html ### 100 ### H
    ./why.html ### 50 ### H
    ./who.html ### 0 ### H

    这样将创建一个直观的链接重排序,并留下空间用于作用域的进一步修改。作用域的数字越大,插入同一变音文件(不过是不同的作用域)的顺序就越靠后。比如说添加一个作用域为 25 的 hoo.html 文件列表,那么它将位于 who.html 条目之上和 why.html 条目之下。

    您还可以使用作用域字段区分目录不同而名称相同的文件。比如说,将 ./NathanHarrington.html 一行的的作用域修改为 100,那么类似 nathenHorrington.html 这样的请求会将 ./NathanHarrington.html 链接列在 ./blogs/NathanHarrington.html 页面之前。

    选择文件的作用域时,务必要考虑 Web 站点的统计和逻辑访问组件。从日志文件可以看出,用户对 why.html 页面的请求比较频繁,但是如果您认为 how.html 对于用户更为重要,那么只需修改相应的作用域值对排序做出纠正。

    构建 CGI 404 处理程序

    我们已经生成了适当的变音并为它们指定了相关的作用域值,下一步将构建实际的建议生成器。通常,404 错误消息的原因为链接输入错误或链接本身的问题。以下代码生成的建议将通过以下三个主要测试创建:根据目录结构匹配、使用变音组合匹配,以及当其他方法失败时使用 “包含” 匹配。这三种测试的设计目的是处理大多数 404 错误。MetaphoneSuggest CGI Perl 脚本的开始部分如下所示。

    清单 4. MetaphoneSuggest CGI 第 1 部分
                   

    以下为引用的内容:
    #!/usr/bin/perl -w
    # MetaphoneSuggest - suggest links for typographical and other errors from 404s
    use strict;
    use CGI::Pretty ':standard';  #standard cgi stuff
    use Text::Metaphone;
     
    my @suggestLinks = (); # suggested link list
    my %mt = ();           # filename, score, metaphone code hash

    my $origLink = substr($ENV{REDIRECT_URL},1); # remove leading /
    $origLink  =~ s/\.html//g;                   # remove trailing .html

    open(MPH,'metaphonesScore.txt') or die "can't open metaphones";
      while(my @slPart = split '###', <MPH>)
      {
        $slPart[0] =~ s/ //g; #remove trailing space
        $mt{$slPart[0]}{ score } = $slPart[1];
        $mt{$slPart[0]}{ metaphones } = $slPart[2];
      }
    close(MPH);

    代码首先引入了一些常用库并声明了一些变量,然后将加载 404 报告文本和通过 buildMetaphoneList.pl 程序创建的变音。这时,我们可以开始编写主要的程序逻辑了,如下所示。

    9 7 3 1 2 3 4 4 8 :

    用户评论

    广而告之