我有一個包含多個webapps的Tomcat實例,每個實例都可以通過/ Context訪問。 Tomcat的背後是httpd(實際上是Debian Apache2),配置了虛擬主機來爲每個應用/上下文服務。 Tomcat連接與mod_jk。從虛擬主機的URL中刪除Tomcat上下文(mod_jk,mod_rewrite)
當我不關心從網址中刪除上下文時,此功能正常工作:當請求虛擬域的根時,請求被重定向到domain.com/Context。
但是對於一個應用程序,我做想要刪除上下文。我相信這可以通過使用mod_rewrite來完成,並將重寫的url傳遞給mod_jk以傳遞給正確的Tomcat上下文。所以,我的Debian Apache2的網站,提供文件看起來像這樣:
NameVirtualHost *
<VirtualHost *>
ServerName domain.be
DocumentRoot /home/webapp/app/static/domain/
RewriteEngine on
RewriteRule ^/(.*)$ /Context/$1 [L,PT]
RewriteLog "/var/log/apache2/domain-rewrite.log"
RewriteLogLevel 4
JkLogFile /var/log/apache2/domain-mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /Context w1
JKMount /Context* w1
JkOptions +ForwardURICompat
ErrorLog /var/log/apache2/domain_error.log
CustomLog /var/log/apache2/domain_access.log combined
LogLevel warn
</VirtualHost>
根據該文檔時,[PT]標誌和+ ForwardURICompat選項應該導致重寫URL傳遞給jk_mod。但是,這似乎並沒有發生。
URL正在重寫,但看起來好像mod_jk忽略它:例如,將domain.be/Context的請求重寫爲/ Context/Context - 但仍然作爲/ Context傳遞給mod_jk。
任何想法?順便說一下,我目前不能使用mod_proxy。
感謝
你是對的,我的原始解決方案不是最好的方式,充滿危險。但自發布以來,我用Tomcat VirtualHosts取得了很大的成功。儘管沒有聽說過人們使用它,但在這種情況下肯定會想要使用它,而在創建之後卻一點也不難。 – 2012-06-16 17:38:42