Thanks for the reply.

Actually my requirement is more complex and it needs dynamic proxying based
on mapping from mysql db. Thats why I used RewriteRule and RewriteMap. One
silly thing was not working so i tried this simple config to test the
problem.

Based on ProxyPassReverse rules I have specified, Location header received
by Apache is translated as follows
1. http://example.com/target/b --> /source/b  : which is as expected
2. http://example.com/target --> /target : which is not I am expecting. I
am expecting /source.

Thank you

On Mon, Feb 13, 2012 at 9:30 PM, Tom Evans <tevans...@googlemail.com> wrote:

> On Mon, Feb 13, 2012 at 11:35 AM, Hridayesh Gupta
> <hridayeshi...@gmail.com> wrote:
> > I have the following rule in conf file at server.com
> >
> > RewriteEngine On
> > RewriteRule /source(.*) http://example.com/target$1 [P]
> > ProxyRequests Off
> > ProxyPassReverse /source http://example.com/target
> >
> > http://example.com/target/a.php redirects to
> http://example.com/target/b.php
> > http://example.com/target redirects to http://example.com/target/
> >
> > When I visit http://server.com/source/a.php , it redirects correctly to
> > http://server.com/source/b.php which will serve the content from
> > http://example.com/target/b.php as defined in rewriterule, But when I
> visit
> > http://server.com/source , it does not redirect to
> http://server.com/source/
> > instead it redirects to http://server.com/target/
> > The above worked correctly on my local machine Apache 2.2.14/Ubuntu with
> > same setting.
> >
> > I also have checked Location header using firbug while visiting
> > http://example.com/target and http://example.com/target/a.php and in
> both
> > cases Location header string is full url eg http://example.com/target/and
> > http://example.com/b.php
> >
> > So In my understanding ProxyPassReverse is not substituting Location
> header
> > correctly in Apache 2.2.4/CentOS
> >
> > Please help me for this issue. Please let me for any further information.
> >
> > Thank you
>
> You seem to be very confused about rewriting and proxying. First of
> all, when you wish to do proxying like in your example, you do not use
> a RewriteRule. You wrote:
>
> RewriteRule /source(.*) http://example.com/target$1 [P]
>
> This is equivalent to:
>
> ProxyPass /source http://example.com/target
>
> You're also proxying stuff you probably didn't intend either - eg
> /source-wibble will get proxied to http://example.com/target-wibble.
> It's best to include a trailing '/' where it is appropriate:
>
> ProxyPass /source/ http://example.com/target/
>
> In fact, it is easier to combine all of this into a Location block:
>
> <Location /source/>
>  ProxyPass http://example.com/target/
>  ProxyPassReverse http://example.com/target/
> </Location>
>
> which is equivalent to your config.
>
> Now, your question is "why doesn't ProxyPassReverse do what I was
> expecting". You have:
>
> ProxyPassReverse /source http://example.com/target
>
> What this means is that when a response is received by apache from the
> http://example.com/target backend with a Location header, it will
> rewrite it. If the location header says "http://example.com/target/b";,
> then it will get rewritten to "/source/b", and then turned into a
> absolute URI by Apache.
>
> If you truly believe that it is a bug in Apache causing this, then you
> will need to track it down. tcpdump showing the incoming request to
> the proxy, the outgoing request that this caused to the backend, the
> response the backend generates and the response that the proxy
> ultimately generates should show what is really happening.
>
> Cheers
>
> Tom
>
> ---------------------------------------------------------------------
> The official User-To-User support forum of the Apache HTTP Server Project.
> See <URL:http://httpd.apache.org/userslist.html> for more info.
> To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
>   "   from the digest: users-digest-unsubscr...@httpd.apache.org
> For additional commands, e-mail: users-h...@httpd.apache.org
>
>

Reply via email to