Apache和Tomcat 實現泛網域名稱解析的嘗試

來源:互聯網
上載者:User

原文:http://www.java2000.net/viewthread.jsp?tid=5422

你想讓自己的伺服器為每個會員提供一個獨立的次層網域嗎?比如
aa.test.com
bb.test.com/blog
當然aa、bb都是你的一個會員而已

下面是我今天嘗試成功的部分

1 安裝apache ,tomcat 和 mod_jk部分我就不說了,如果你不能使用它們,請參考其它教程

2 相關的設定檔

httpd.conf

 
# 去掉這個前面的#,啟用它
LoadModule rewrite_module modules/mod_rewrite.so
 
# 啟用jk,同時配置參數
LoadModule   jk_module   modules/mod_jk.so       
JkWorkersFile   D:/Apache2.2/conf/workers.properties     
JkLogFile   d:/Apache2.2/logs/mod_jk.log     
JkLogLevel   info   
#JkLogLevel   debug     
JkLogStampFormat   "[%a   %b   %d   %H:%M:%S   %Y]   "     
JkOptions   +ForwardKeySize   +ForwardURICompat   -ForwardDirectories     
JkRequestLogFormat   "%w   %V   %T"     
JkMount   /servlet/*   myloadbalancer   
JkMount   /*.jsp   myloadbalancer
 
# 虛擬機器主機,這裡類比了 a.test.com 和 b.test.com 以及 a.tst.com/blog的調用
 
<VirtualHost _default_:80>
ServerAdmin yourmail@domain.com
DocumentRoot D:Apache2.2htdocs
ServerName all-sites
ErrorLog logs/all-sites-error.log
CustomLog logs/all-sites-access.log common
RewriteEngine On
# 下面四行實現動態解析
RewriteCond %{HTTP_HOST} ^[a-z0-9-]+.test.com$
RewriteRule ^/(.*)$ /%{HTTP_HOST}/$1
RewriteRule ^/([a-z0-9-]+).test.com/?$ /index.jsp?u=$1 [L,PT]
RewriteRule ^/([a-z0-9-]+).test.com/blog(/(.*))?$ /blog.jsp?u=$1&$3 [L,PT]

<Directory "D:Apache2.2htdocs">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

</VirtualHost>

workers.properties

  worker.list=myloadbalancer   
    
  worker.tomcat1.type=ajp13   
  worker.tomcat1.host=localhost   
  worker.tomcat1.port=8009   
  worker.tomcat1.lbfactor=1   
      
    
  worker.myloadbalancer.type=lb   
  worker.myloadbalancer.balance_workers=tomcat1   
  worker.status.type=status  

server.xml 
去掉前後的<!-- 和 -->啟用 8009連接埠

 <Connector port="8009" 
...

3 說明一下

在httpd.conf裡面啟用了rewrite_module,和 mod_jk, 並配置了 與tomcat的串連配置。

虛擬機器主機的配置是關鍵

ServerName all-sites
可以修改為
ServerName test.com
ServerAlias *.test.com
這樣可以明確指定這個虛擬機器主機負責的網域名稱

urlRewrite 配置部分

  1. RewriteCond %{HTTP_HOST} ^[a-z0-9/-]+/.test/.com$   
  2. RewriteRule ^/(.*)$ /%{HTTP_HOST}/$1  
  3. RewriteRule ^/([a-z0-9/-]+)/.test/.com/?$ /index.jsp?u=$1 [L,PT]   
  4. RewriteRule ^/([a-z0-9/-]+)/.test/.com/blog(/(.*))?$ /blog.jsp?u=$1&$3 [L,PT]   

第一行,聲明這個重寫只對主機名稱(%{HTTP_HOST}) 類似 XXXX.test.com  感興趣,那個是正則的

第二行,將所有的對此網域名稱的請求進行第一次改寫,比如
a.test.com 改成
/a.test.com


b.test.com/blog 改成
/b.test/com/blog

第三行,對無參數的訪問進行調整
將 /a.test.com 改成
/index.jsp?u=a

第四行,對有參數路徑的進行調整
將 /b.test.com/blog 改成
/blog.jsp?u=b

如果還有參數比如
b.test.com/id=3 則最終改寫為
/b.test.com/id=3
/blog.jsp?u=b&id=3

剩下的就不多說了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.