我一直在修补 Apache + Tomcat,这样我就可以通过 apache(干净清晰的 urls rock)为多个 tomcat 应用程序(在不同的机器上)提供服务。我已经成功配置mod_proxy_ajp
&到可以在不同机器上提供两个 tomcat 应用程序几乎没有问题mod_rewrite
的地步。
我发现的唯一问题是其中一个应用程序(我在 Struts2 中开发)有很多链接和表单,它们是用<s:a />
,<s:url />
和<s:form />
标签生成的。这些标签生成的url一般是这样的:
/WebApp/path/to/some.action
多亏了 ModRewrite 的魔力,这通常不是一个大问题,指向此类 url 的超链接会很快被重写并重定向到/app/path/to/some.action
(尽管我确实得到了大量的302
响应)。
真正的问题发生在执行 POST 请求时。大家可能都知道,我无法POST
使用 mod_rewrite 重定向请求......所以最后......我的所有POST
请求都不起作用,因为 mod_rewrite 重定向到正确的 url,而是作为GET
请求。
我已经阅读了一些关于mod_proxy_html
它如何帮助我重写 Tomcat Web 应用程序返回的 url……但感觉很麻烦。
这是我当前的 apache 配置:
## HACKING BEGINS RIGHT HERE
# cookies
ProxyPassReverseCookiePath /WebApp /app
# this is for CSS, IMGs, JS and redirecting urls with /WebApp*
RewriteRule ^/WebApp(.*)$ /app$1 [R,L]
<Location /app>
ProxyPass ajp://localhost:8009/WebApp
ProxyPassReverse ajp://localhost:8009/WebApp
Order allow,deny
Allow from all
</Location>
# the other app
ProxyPassReverseCookiePath /WebApp2 /other
<Location /other>
ProxyPass ajp://200.9.4.6:8009/WebApp2
ProxyPassReverse ajp://200.9.4.6:8009/WebApp2
Order allow,deny
Allow from all
</Location>
我的请求问题必须有解决方案POST
......有什么想法吗?我能以某种方式配置一些允许 Struts2 输出正确 url 的东西吗?
谢谢你的帮助。