我有一个包含多个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