Thanks, André, for your response.

To give you a little more context, I needed to get this working as soon as
possible, which I basically have.  Eventually, yes, I want the static
content to be served by HTTPD, and the dynamic content to be served by
Tomcat.  I did not want to deploy my application as ROOT, for reasons that,
now that I think about it, don't really make sense.

Anyway, your clue about the Directory directive was very helpful.  It
turned out that my rewrite rules were being ignored.  I ended up with two
rules, each on the condition that the request URI does not already contain
the context.  I settled on the following (I'm running a Grails application
which automagically recognizes the "html" extension):

RewriteEngine On
RewriteCond $0 !^/application/(.*)
RewriteRule ^(.*)/$ ajp://localhost:8009/application/$1 [P]
RewriteCond $0 !^/application/(.*)
RewriteRule ^(.*)\.html$ ajp://localhost:8009/application$1.html [P]

I know I still have some work to do, but at least I now have it basically
working.


On Mon, Dec 10, 2012 at 5:43 PM, André Warnier <a...@ice-sa.com> wrote:

> Jeff Beard wrote:
>
>> On Mon, Dec 10, 2012 at 2:22 PM, Dhruva Reddy <bdhr...@gmail.com> wrote:
>>
>>  Hello,
>>>
>>> I have a question about running Tomcat behind Apache HTTP server.  I hope
>>> this is not inappropriate for this list.
>>>
>>> I am running a website on Tomcat 7.0.33, behind Apache 2.2.15, on CentOS
>>> 6.3 (using Tomcat connector 1.2.37).  I would like the user to go to our
>>> base URL (http://www.example.com), but have the request served by a web
>>> application running on Tomcat (I have the connector working, so that you
>>> can access the application through 
>>> http://www.example.com/**application/<http://www.example.com/application/>
>>> ).
>>>
>>> I thought this could be accomplished through a rewrite rule on the HTTP
>>> server, but I can't seem to get it to work, nor can I find much
>>> information
>>> on it.  I can't really find any best practices around this, either.  Has
>>> anyone done this successfully?
>>>
>>> I have tried many things, but this is what I currently have in
>>> httpd.conf:
>>>
>>> <Directory "/var/www/html">
>>>     Options Indexes FollowSymLinks
>>>     AllowOverride None
>>>     Order allow,deny
>>>     Allow from all
>>>     RewriteEngine On
>>>         <IfModule mod_rewrite>
>>>         RewriteBase /
>>>         RewriteRule ^/ application/ [NC]
>>>         RewriteLog "/etc/httpd/logs/rewrite.log"
>>>         RewriteLogLevel 9
>>>     </IfModule>
>>> </Directory>
>>>
>>> I did confirm that the rewrite module is loaded.  Any insights would be
>>> greatly appreciated.
>>>
>>> Thanks,
>>> Dhruva
>>>
>>>
>>
>> Dhruva,
>>
>> Based on the snippet of configuration you've provided it isn't clear that
>> you've configured the Tomcat Connector. Perhaps there's more that you
>> haven't shown us? Anyway, most recently I've configured Apache much like
>> this document describes:
>>
>> http://tomcat.apache.org/**connectors-doc/generic_howto/**quick.html<http://tomcat.apache.org/connectors-doc/generic_howto/quick.html>
>>
>>
>>
> I have another couple of questions :
> 1) considering that you want that "^/" (the top of your Apache httpd's URL
> space) be forwarded to Tomcat, do you have anything that would /not/ be
> forwarded to Tomcat ?
> If yes, where would that part live (in which directory/URL space of your
> httpd server) ?
> If no, why do you even need the front-end Apache httpd ?
> 2) have you considered making your Tomcat application "/application" be
> the "/ROOT" default webapp of Tomcat ? Then it would be mapped to the path
> "/" in Tomcat also, and no rewriting would be required.
>
> But, assuming for now that you need a front-end httpd and that you want to
> forward everything to "/application" in Tomcat, do this instead :
>
> RewriteEngine On
> RewriteLog "/etc/httpd/logs/rewrite.log"
> RewriteLogLevel 9
>
> <Location />
>
>      Order allow,deny
>      Allow from all
>      RewriteRule (.*) /application/$1 [NC]
>      SetHandler jakarta-servlet    <-- this is what forwards to Tomcat
> </Location>
>
> Explaining all the changes in detail would be a lot here, but here's a few
> notes :
> 1) SetHandler jakarta-servlet : replaces "JkMount" instructions, with
> similar effect. It tells Apache that for this, you want mod_jk (the
> Apache-Tomcat connector) to generate the response, which it does by
> forwarding the request to tomcat, and collecting tomcat's response.
> 2) removal of <IfModule> directives : you don't want them here, I guess.
> If mod_rewrite is not there, none of your Rewrite directives will be
> understood, and your Apache won't start. That is probably what you really
> want; you don't just want Apache to do something else then.
> 3) you can move the 3 first Rewrite* directives back into the <Location>
> section if you want.  But where they are, they will be inherited by it
> anyway.
> 4) I think (I am not 100% sure) that using a <Directory> section for this
> is already "a bit late" in the Apache cycle.  By the time Apache looks
> inside a <Directory> section, it has already parsed the URL, and mapped it
> to a disk directory. In this case, you don't want a disk directory (you may
> not even have one there). You want to catch this earlier, as soon as Apache
> is just looking at the URL. That's what <Location> sections are about.
> 5) Inside a <Directory> or <Location> section, the first element to the
> Rewrite rule is matched against what remains of the URL path, after
> stripping the portion which made this Directive being interpreted inside
> that section. So in
>    <Location />
>      RewriteRule (.*) /application/$1 [NC]
> the "(.*)" matches everything after "/", and is captured in $1.
> Then you re-inject that same $1 value in the rewritten path
> /application/$1.
>
>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> users-unsubscribe@tomcat.**apache.org<users-unsubscr...@tomcat.apache.org>
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>


-- 
“Most people would rather die than think. In fact, they do so.” - Bertrand
Russell

Reply via email to