我说一下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去掉
我觉得我已经尽可能的讲清楚了。如果你还是看不懂,最好还是找apache的中文文档(国内网站有的是,你可以去
http://man.chinaunix.net看看)好好看看Rewrite的部分吧。
系统提示:这是一个从旧版导入的帖子,如有问题请参照原帖(原帖地址见顶楼)。