Я возился с Apache + Tomcat, чтобы я мог обслуживать несколько приложений tomcat (на разных машинах) через apache (чистые и четкие URL-адреса).Я успешно настроил mod_proxy_ajp
& mod_rewrite
до такой степени, что могу обслуживать два приложения tomcat на разных машинах с почти без проблем.
Единственная проблема, которую я обнаружил, эточто одно из приложений (которое я разрабатываю в Struts2) имеет множество ссылок и форм, которые генерируются с помощью тегов <s:a />
, <s:url />
и <s:form />
.URL-адреса, сгенерированные этими тегами, обычно выглядят так:
/WebApp/path/to/some.action
Благодаря магии ModRewrite это, как правило, не проблема big и гиперссылки натакие URL-адреса быстро переписываются и перенаправляются на /app/path/to/some.action
(хотя я получаю тонны 302
ответов).
Настоящая проблема возникает при выполнении запросов POST.Как вы все знаете, я не могу перенаправить POST
запросы с помощью mod_rewrite ... так что в итоге ... все мои POST
запросы не работают, потому что mod_rewrite перенаправляет на правильный URL-адрес, но как запрос GET
.
Я уже немного прочитал о mod_proxy_html
и о том, как он может помочь мне переписать URL-адреса, возвращаемые веб-приложением Tomcat ... но это доставляет неприятности.
Это мой текущийКонфигурация 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-адреса?
Спасибо за вашу помощь.