先抄一段解释(这大概是当前对二级域名的 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去掉
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>