On 02.03.2009 03:21, Andres Riancho wrote:
List,
I've search the Tomcat FAQ, but I haven't been able to find any
answers, so... here is my question... I have a JSP application
deployed in Tomcat inside the "/abc/" directory; and I want to be able
to access it from *two different locations* from Apache, for example,
when I access: "http://apache/abc/" and "http://apache/123/abc/". The
first JkMount is trivial:
JkMount /abc ajp13_worker
JkMount /abc/* ajp13_worker
And is working as expected, but for the second... I don't have the
slightest clue on how to do it... I tried mod_rewrite, but it seems
that it isn't possible to combine JkMount's and URL rewrites in a
successful way. Could anyone point me in the right direction? Thanks!
I'm using Apache2, Tomcat6.
I'll give an answer for Apache 2.2 and yes, this is missing in the
documentation at the moment. For IIS there is a builtin rewrite feature
in mod_jk, but not for httpd, because httpd can already do it on its own.
Context rewriting for mod_jk and Apache httpd
=============================================
Tested with httpd 2.2.11.
You need to handle three things:
1) Rewrite the URL /xxx/something to /yyy/something before the request
gets send to Tomcat
2) Change any redirects you get back from Tomcat, which point to
locations /yyy/somethingelse, into location /xxx/somethingelse
3) Change pathes of cookies, which might get set by the application from
/yyy to /xxx.
The module mod_proxy allow sto do this via ProxyPass, ProxyPassReverse
and ProxyPassReverseCookiePath directives. But you can't use mod_proxy
and mod_jk for the same requests.
The first directive can be replaced by some RewriteRule, the other two
cases will be handled by dynamically changing response headers.
So lets start with
JkMount /yyy/* myworker
and now:
ad 1) RewriteRule ^/xxx/(.*)$ /yyy/$1 [PT]
This will change any rquest /xxx/something into /yyy/something before
passing it to mod_jk.
ad 2) Header edit Location ^([^/]*//[^/]*)?/yyy/(.*)$ $1/xxx/$2
This changes Location headers, the headers used for signalling a
redirect to the client.
Any URL of the form "protocol://server:port/yyy/something" will be
changed (yyy -> xxx), as well as URLs of the form "/yyy/something".
Happy regular expression studying.
ad 3) Header edit Set-Cookie "^(.*; Path=)/yyy([/;].*)?$" $1/xxx$2
This changes Set-Cookie headers, the headers used for setting a cookie.
I hope you get the idea.
In case your webapp puts self referential links into he response pages
themselves, things get more complicated (or say: more expensive in terms
of CPU cycles). Then you must parse the complete response pages to do
search and replace. You can do that e.g. with mod_substitute or mod_sed
or mod_proxy_html.
It seems it would be nice, mod_jk had short hand notations for 1)-3).
You can file an enhancement request in bugzilla for this, if you like.
Regards,
Rainer
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org