先抄一段解释(这大概是当前对二级域名的 rewrite作出的最浅白的解释了)
http://my.iecn.net/bbs/view/105627.html

apache的处理过程

1: RewriteCond %{HTTP_HOST} ^([a-z0-9\-]+)\.b2b\.test\.com$
2: RewriteCond %{HTTP_HOST} !^(www|bbs)\.b2b\.test\.com$
3: RewriteRule (.*) /%{HTTP_HOST}/$1
4: RewriteRule /([a-z0-9\-]+)\.b2b\.test\.com/(.*)$ /company/$1/$2 [L]

假设现在访问 http://xxx.b2b.test.com/abc

apache的处理过程是:
首先进入3,注意rewite的过程是先看RewriteRule的匹配再去找它关面的条件,显然.*是任何情况都适合的;
匹配成功,会找它前面尽可能多的条件,在这里1和2的条件都起作用,就是说符合 *.b2b.test.com 但不能是 www.b2b.test.com 或 bbs.b2b.test.com;
条件成立后,进行替换,经替换后变成 http://xxx.b2b.test.com/xxx.b2b.test.com/abc,注意这只是一个过渡!
接下来执行4,经过4的替换后就变成了 http://xxx.b2b.text.com/xxx/abc

以上这些我没有实际去试过,不排除有个别的手误造成的小错误,你实际试一下。一个是你可以看rewrite日志,或者你先把4改成:
RewriteRule /([a-z0-9\-]+)\.b2b\.test\.com/(.*)$ /company/$1/$2 [L,R]
看看地址栏里是不是重写成功,试好后再把R去掉

<VirtualHost *:80>
    DocumentRoot F:/web/local.duote.net
    ServerName local.duote.net
    ServerAlias *.duote.net
    RewriteEngine On
    
    #RewriteLog d:\rewrite_2.log
    #RewriteLogLevel 
0

    RewriteCond %{HTTP_HOST} ^(.+)\.duote\.net$
    RewriteCond %{HTTP_HOST} !^(local)\.duote\.net$
    RewriteRule ^/?$ /%{HTTP_HOST}/ 
    RewriteRule ^/(
[a-zA-Z0-9\-]+)\.duote\.net/?$ /index.php?act=file&task=indexByUser&userName=$1

</VirtualHost>