Ric*_*d H 6 apache mod-rewrite tomcat mod-jk virtual-hosts
我有一个包含许多webapp的Tomcat实例,每个都可以通过它的/ Context访问.Tomcat是httpd(实际上是Debian Apache2)的后面,配置了虚拟主机来为每个app/Context提供服务.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>
Run Code Online (Sandbox Code Playgroud)
根据文档,[PT]标志和+ ForwardURICompat选项应该导致重写的URL传递给jk_mod.然而,这似乎并没有发生.
正在重写URL,但似乎mod_jk忽略了它:例如,对domain.be/Context的请求被重写为/ Context/Context - 但仍然作为/ Context传递给mod_jk.
有任何想法吗?顺便说一下,我现在不能使用mod_proxy.
谢谢
我一直在使用这个并取得了巨大成功:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(Context/.*)$
RewriteRule ^/(.*)$ /Context/$1 [P,L]
Run Code Online (Sandbox Code Playgroud)
关于您的情况的注释:
[P]
将被忽略,并且请求将被转发而不是被代理。这是没有办法解决的。+ForwardURICompat
是mod_jk的一部分,重写后生效。RewriteCond
(上面)来防止对 /Context 的请求被重写。我目前正在寻找一种无需 mod_rewrite 即可完成此操作的方法,而是仅使用 mod_jk 和 Tomcat <Host>'s。但是我在 apache、mod_jk 和 Tomcat 主机无法很好地协同工作时遇到了问题。上面的内容应该适合你。
归档时间: |
|
查看次数: |
17105 次 |
最近记录: |