Apache与Tomcat的整合,以及Rewrite的使用 http://blog.niwota.com/a/163891.htm
1. 支持二级动态域名
a.首先需要域名提供商支持 泛域名解析。
b, 在Apache中做如下重写(只写Rewrite部分了):
再举一个可能更常见的实例,假设一个博客系统,要求把
http://xxx.eponet.cn 隐式的重写成 http://www.eponet.cn/member?id=xxx
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.iecn\.cn$
RewriteRule ^/?$ /%{HTTP_HOST}
RewriteRule ^/([a-z0-9\-]+)\.iecn\.cn/?$ /blog.php?u=$1 [L]
# 下面三行实现动态解析
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.iecn\.cn$
RewriteRule ^/(.*)$ /%{SERVER_NAME}/$1 ##注##
RewriteRule ^/([a-z0-9\-]+)\.iecn\.cn/(.*)$ /YourWwwRoot/$1/$2 [L]
Apache下用rewrite实现动态二级域名解析 http://www.360doc.com/showWeb/0/0/263162.aspx
Tomcat二级域名实现 http://bbs2.chinaunix.net/archiver/?tid-929265.html
二级域名地址栏显示问题:http://my.iecn.net/bbs/view/105627.html
级域名问题,急 2006-10-03 16:50:15
RewriteCond Host: (?!/.|www|bbs)(.*).b2b.test.com
RewriteRule (.*) http://b2b.test.com/company/$1$2 [I,R]
我想让地址栏显示为 xxx.b2b.test.com,而不是http://b2b.test.com/company/xxx,该怎样写呀?
在下先谢谢了
有两点:
首先,RewriteRule的“R”标识符的意思就是显式的重定向URL,就是说对浏览器来讲是一次重新的请求,这
样显然地址栏里显示的是新的址址;
其次,在RewriteRule中,一旦域名发生了变化,即便没有用“R”标识符,也会显式的重定向URL。
最后还有一点,你的写法本来就是错误的,$1、$2,匹配的是RewriteRule里的匹配,而不是RewriteCond
里的。
你的这种情况应该写成:
RewriteCond %{HTTP_HOST} ^([a-z0-9\-]+)\.b2b\.test\.com$
RewriteCond %{HTTP_HOST} !^(www|bbs)\.b2b\.test\.com$
RewriteRule (.*) /%{HTTP_HOST}/$2
RewriteRule /([a-z0-9\-]+)\.b2b\.test\.com/(.*)$ /company/$1/$2 [L]
以上就是分两步,把域名中你需要的一个名字提取出来,这种情况只能这样写,同时如果想实现你所说的
地址栏上看起来没变,在重写中不能出现http,这样就要求你所有转向的域名都要解析到这个服务器下。
如果你用的是apache的NameVirtualHost,你可以把这一组放到第一组,这样当没有域名匹配时,默认就是
第一组。如果做不到这一点,就意味着你要在ServerAlias放所有用到的域名了。
谢谢这位高手,小弟愚昧
RewriteRule (.*) /%{HTTP_HOST}/$2
这句甚末意思呀?$2表示的是甚末?
RewriteRule /([a-z0-9\-]+)\.b2b\.test\.com/(.*)$ /company/$1/$2 [L]
指定到那个目录了?
我打算实现的是把bbbbbb.test.com ,指定到/company/bbbbbb下,该怎样实现?
写错了。
RewriteRule (.*) /%{HTTP_HOST}/$2
应该是:
RewriteRule (.*) /%{HTTP_HOST}/$1
比如 http://xxx.b2b.iecn.net/abc
重写后就是 http://xxx.b2b.iecn.net/xxx.b2b.iecn.net/abc
注意这只是一个过渡,目的是把域名中的xxx提出来(这才是最终目的),因为这个目录显然不存在,也只
有这样才能把域名中的东西提出来。
我说一下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的部分吧。
RewriteEngine On
RewriteRule ^(/image/.*)$ $1 [L]
RewriteRule ^(/css/.*)$ $1 [L]
RewriteRule ^(/rte/.*)$ $1 [L]
RewriteRule ^(/script/.*)$ $1 [L]
RewriteRule ^(/favicon.ico)$ $1 [L]
# Access the nbbs context directly.
RewriteRule ^(/nbbs/.*)$ $1 [L]
RewriteRule ^/$ /nbbs/index [PT]
RewriteRule ^/(index)$ /nbbs/index [PT]
RewriteRule ^/(thread|user|download|admin|threads|recommends|search|error|tag)(.*)$ /nbbs/$1$2 [PT]
# AJAX URIs:
RewriteRule ^/(ajax/.*)$ /nbbs/$1 [PT]
CustomLog logs/mod_jk_log common
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
2. 把url 动态改成静态
用URL重写方式 2种