我有一个 Tomcat 实例,其中包含许多 webapp,每个都可以通过它的 /Context 访问。Tomcat 落后于 httpd(实际上是 Debian Apache2),配置了虚拟主机来服务每个应用程序/上下文。Tomcat 连接使用 mod_jk。
当我不关心从 url 中删除上下文时,这很好用:当请求虚拟域的根时,请求被重定向到 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。
谢谢