squid的重定向,我看网上一般都采用 redirect_children (即 url_rewrite_children)。估计是因为中文权威指南的原因吧。不过中文权威指南还是2.5版的时候出的。有些新东西没有。比如 squid.conf.default 中提供的另一种 url_rewrite_concurrency

官方使用说明如右:http://wiki.squid-cache.org/Features/Redirectors#How_do_I_make_it_concurrent.3F

简单的说,就是开启 url_rewrite_concurrency 后,squid传递给rewriter的流由四个域增加为五个——最前头多了一个ID。然后rewriter返回的,也就有两个域,ID和uri。

简单修改一下原来的脚本如下即可:

#!/usr/bin/perl -wl
use strict;
$|=1;
while () {
    my ($id,$url,$client,$ident,$method) = ( );
    ($id, $url, $client, $ident, $method) = split;
    if ($url =~m#^(.*)(?.*)#i) {
        my ($domain,$option) = ($1,$2);
        print "$id $domain\n";
    } else {
        print "$id\n";
    }
}

然后squid.conf里修改如下:

acl rewriteurl url_regex -i ^http://drag.g1d.net/.*.mp40drag?
url_rewrite_access deny !rewriteurl
url_rewrite_program /home/squid/etc/redirect.pl
#url_rewrite_children 10
url_rewrite_concurrency 10