【发布时间】:2011-03-30 13:09:38
【问题描述】:
我一直在修补 Apache + Tomcat,以便我可以通过 apache(干净且清晰的 url 摇滚)为多个 Tomcat 应用程序(在不同的机器上)提供服务。我已经成功地配置了mod_proxy_ajp 和mod_rewrite,以至于我可以在不同的机器上为两个tomcat 应用程序提供服务,而几乎没有任何问题。
我发现的唯一问题是其中一个应用程序(我在 Struts2 中开发)有很多链接和表单,它们是使用 <s:a />、<s:url /> 和 <s:form /> 标签生成的。这些标签生成的url一般是这样的:
/WebApp/path/to/some.action
感谢 ModRewrite 的魔力,这通常不是一个大 问题,指向此类 url 的超链接会被快速重写并重定向到 /app/path/to/some.action(尽管我确实收到了大量的 302 回复)。
真正的问题发生在执行 POST 请求时。大家可能都知道,我无法使用 mod_rewrite 重定向 POST 请求......所以最后......我所有的 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 的东西吗?
感谢您的帮助。
【问题讨论】:
-
离题。尝试服务器故障。