Apache與Tomcat的整合,以及Rewrite的使用 http://blog.niwota.com/a/163891.htm
1. 支持二級動態(tài)域名
a.首先需要域名提供商支持 泛域名解析。
b, 在Apache中做如下重寫(只寫Rewrite部分了):
再舉一個(gè)可能更常見的實(shí)例,假設(shè)一個(gè)博客系統(tǒng),要求把
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]
# 下面三行實(shí)現(xiàn)動態(tài)解析
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.iecn\.cn$
RewriteRule ^/(.*)$ /%{SERVER_NAME}/$1 ##注##
RewriteRule ^/([a-z0-9\-]+)\.iecn\.cn/(.*)$ /YourWwwRoot/$1/$2 [L]
Apache下用rewrite實(shí)現(xiàn)動態(tài)二級域名解析 http://www.360doc.com/showWeb/0/0/263162.aspx
Tomcat二級域名實(shí)現(xiàn) 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,該怎樣寫呀?
在下先謝謝了
有兩點(diǎn):
首先,RewriteRule的“R”標(biāo)識符的意思就是顯式的重定向URL,就是說對瀏覽器來講是一次重新的請求,這
樣顯然地址欄里顯示的是新的址址;
其次,在RewriteRule中,一旦域名發(fā)生了變化,即便沒有用“R”標(biāo)識符,也會顯式的重定向URL。
最后還有一點(diǎn),你的寫法本來就是錯(cuò)誤的,$1、$2,匹配的是RewriteRule里的匹配,而不是RewriteCond
里的。
你的這種情況應(yīng)該寫成:
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]
以上就是分兩步,把域名中你需要的一個(gè)名字提取出來,這種情況只能這樣寫,同時(shí)如果想實(shí)現(xiàn)你所說的
地址欄上看起來沒變,在重寫中不能出現(xiàn)http,這樣就要求你所有轉(zhuǎn)向的域名都要解析到這個(gè)服務(wù)器下。
如果你用的是apache的NameVirtualHost,你可以把這一組放到第一組,這樣當(dāng)沒有域名匹配時(shí),默認(rèn)就是
第一組。如果做不到這一點(diǎn),就意味著你要在ServerAlias放所有用到的域名了。
謝謝這位高手,小弟愚昧
RewriteRule (.*) /%{HTTP_HOST}/$2
這句甚末意思呀?$2表示的是甚末?
RewriteRule /([a-z0-9\-]+)\.b2b\.test\.com/(.*)$ /company/$1/$2 [L]
指定到那個(gè)目錄了?
我打算實(shí)現(xiàn)的是把bbbbbb.test.com ,指定到/company/bbbbbb下,該怎樣實(shí)現(xiàn)?
寫錯(cuò)了。
RewriteRule (.*) /%{HTTP_HOST}/$2
應(yīng)該是:
RewriteRule (.*) /%{HTTP_HOST}/$1
比如 http://xxx.b2b.iecn.net/abc
重寫后就是 http://xxx.b2b.iecn.net/xxx.b2b.iecn.net/abc
注意這只是一個(gè)過渡,目的是把域名中的xxx提出來(這才是最終目的),因?yàn)檫@個(gè)目錄顯然不存在,也只
有這樣才能把域名中的東西提出來。
我說一下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]
假設(shè)現(xiàn)在訪問 http://xxx.b2b.test.com/abc
apache的處理過程是:
首先進(jìn)入3,注意rewite的過程是先看RewriteRule的匹配再去找它關(guān)面的條件,顯然.*是任何情況都適合
的;
匹配成功,會找它前面盡可能多的條件,在這里1和2的條件都起作用,就是說符合 *.b2b.test.com 但不
能是 www.b2b.test.com 或 bbs.b2b.test.com;
條件成立后,進(jìn)行替換,經(jīng)替換后變成 http://xxx.b2b.test.com/xxx.b2b.test.com/abc,注意這只是一
個(gè)過渡!
接下來執(zhí)行4,經(jīng)過4的替換后就變成了 http://xxx.b2b.text.com/xxx/abc
以上這些我沒有實(shí)際去試過,不排除有個(gè)別的手誤造成的小錯(cuò)誤,你實(shí)際試一下。一個(gè)是你可以看rewrite
日志,或者你先把4改成:
RewriteRule /([a-z0-9\-]+)\.b2b\.test\.com/(.*)$ /company/$1/$2 [L,R]
看看地址欄里是不是重寫成功,試好后再把R去掉
我覺得我已經(jīng)盡可能的講清楚了。如果你還是看不懂,最好還是找apache的中文文檔(國內(nèi)網(wǎng)站有的是,
你可以去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 動態(tài)改成靜態(tài)
用URL重寫方式 2種