httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <ogjunk-htt...@yahoo.com>
Subject Re: [users@httpd] mod_rewrite decodes %20 -> 400 bad request
Date Mon, 21 Nov 2005 18:34:14 GMT
Hi,

To wrap up this thread and for the archives:

Changing from [P] to [PT] also solved the issue with %20 being decoded
to a space before dispatching the request to the rewritten URL (what
the subject describes).

Consequently, this now works beautifully:

  http://simpy.com/user/otis/search/apache%20%20%20httpd

Again, thanks for helping me through this.

Otis

--- ogjunk-httpd1@yahoo.com wrote:

> Hi,
> 
> --- Robert Ionescu <robsiegen@googlemail.com> wrote:
> 
> > ogjunk-httpd1@yahoo.com wrote:
> > > One more thing....
> > > 
> > > --- André Malo <nd@perlig.de> wrote:
> > > 
> > >> * <ogjunk-httpd1@yahoo.com> wrote:
> > >>
> > >>> Hi,
> > >>>
> > >>> I "solved" this problem by substituting "%20" with "+"
> > characters. 
> > >>> Apparently, mod_rewrite doesn't convert "+" to spaces as it
> does
> > >> with
> > >>> "%20".
> > >> Your "problem" is home-made. mod_rewrite always works on the
> > >> unescaped
> > >> URI-path and you're explicitly specifying by using [NE] that no
> > >> escaping
> > >> on the final string should be done. So you end up with unescaped
> > >> characters
> > >> in this final string (not only spaces will be a problem).
> > > 
> > > Just to make sure I got this - are you saying that if I remove
> [NE]
> > > from the RewriteRule, then mod_rewrite will NOT convert %20 in a
> > > requested URI to a space?
> > 
> > NE=no escape. mod_rewrite will not escape the output, meaning the 
> > substitution /bar?arg=P1\%3dTest would usually become 
> > /bar?arg=P1%253dTest (% is encoded into %25, and the NE-Flag
> prevents
> > this).
> > 
> > > Try this:
> > >   http://simpy.com/user/otis/search/apache%20httpd
> > > 
> > > That URL is handled by the following RewriteRule:
> > > 
> > > RewriteRule      ^/user/(.*)/search/(.*)$      
> > > /simpy/User.do?username=$1&q=$2 [P,env=URR:1]
> > 
> > What I also asked you about in the newsgroup
> > alt.apache.configuration: 
> > Why are you using the proxy-Flag ([P]). There is nothing to proxy
> > here, 
> > because no protocol + host is given. So why don't you use just
> > 
> > RewriteRule ^/user/(.*)/search/(.*)$
> /simpy/User.do?username=$1&q=$2 
> > [L,env=URR:1]
> > 
> > I tested both rules an apache 1.3.33, the one with the P-Flag
> returns
> > a 
> > 400, without a 200.
> > 
> > > This results in the following request under the hood:
> > > GET /simpy/User.do?username=otis&q=apache httpd HTTP/1.1" 400 369
> > "-"
> > > "-"
> > >                                    ^^^^^^^^^^^^
> > 
> > Usually the original request should be logged,
> > /user/otis/search/apache 
> > httpd, not the one you're rewriting to. I think it's caused by the
> > P-Flag.
> 
> 
> I tried it with [L], but hit a 404.
> I think that is because with [L] Apache/mod_rewrite is not aware of
> the
> fact that the URL that I rewrite _to_ (e.g. /simpy/User.do?.....) is
> actually a mod_jk mapping for the Servlet engine:
> 
> <IfModule mod_jk.c>
>   JKWorkersFile "/usr/local/apache/conf/workers.properties"
>   JKLogFile     "/usr/local/apache/logs/mod_jk.log"
>   JKLoglevel    error
>   JKMount       /simpy/*     ajp13
> </IfModule>
> 
> So, with [L] Apache/mod_rewrite think that /simpy/User.do?.... s a
> real
> URL, they try to go there and, of course, find nothing, and return a
> 404.
> 
> Here is the info from RewriteLog:
> (slightly different rewrite rule:  /people --> /simpy/People.do)
> 
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958d6b4/initial] (2) init rewrite engine
> with requested uri /people
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958d6b4/initial] (3) applying pattern
> '^/people(\/?)$' to uri '/people'
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958d6b4/initial] (2) rewrite /people ->
> /simpy/People.do
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958d6b4/initial] (2) local path result:
> /simpy/People.do
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958d6b4/initial] (1) go-ahead with
> /simpy/People.do [OK]
> 
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958e5d4/initial/redir#1] (2) init rewrite
> engine with requested uri /people
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958e5d4/initial/redir#1] (3) applying
> pattern '^/people(\/?)$' to uri '/people'
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958e5d4/initial/redir#1] (2) rewrite
> /people -> /simpy/People.do
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958e5d4/initial/redir#1] (2) local path
> result: /simpy/People.do
> 127.0.0.1 - - [20/Nov/2005:19:59:19 -0500]
> [127.0.0.1/sid#958505c][rid#958e5d4/initial/redir#1] (1) go-ahead
> with
> /simpy/People.do [OK]
> 
> 
> I then tried with both [P] and [PT].
> Both of these result in a 200 (OK), which is good!
> [P] resulted in both request URIs to be logged:
>   /people
>   AND
>   /simpy/People.do
> 
> (this is why I used that env URR=1 hack to do conditional logging and
> log only one of those hits (the latter))
> 
> [PT] resulted in only the "pretty" request URI being logged:
>   /people
> 
> This makes [PT] more attractive.
> 
> 
> BUUUUUUT, [PT] looked even more attractive to me when I looked at the
> RewriteLog log - with [P] the request went through a 2-part phase,
> where first the request URI /people would be matched to
> /simpy/People.do....., and then the /simpy/People.do request would be
> processed and passed through, because it wouldn't match any rules.
> 
> In short, this is my conclusion:
> 
> [L] doesn't work for me (404), because the URL rewritten _to_ is not
> a
> URL for a static file, but rather a webapp/servlet engine mapping
> 
> [P] works (200), but logs both URLs (pretty one and the one rewritten
> to), and it also involves more request processing
> 
> [PT] works (200), logs only 1 request URL (the pretty one), and it
> involves less request processing than [P]
> 
> 
> Robert and André - thank you for your help and please correct me if
> I'm
> wrong - I'm not new to httpd, but I am new to URL rewriting.
> 
> Thanks,
> Otis
> 
> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
> Simpy -- http://www.simpy.com/ -- Find it. Tag it. Share it.
> 
> ---------------------------------------------------------------------
> 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-unsubscribe@httpd.apache.org
>    "   from the digest: users-digest-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org
> 
> 


---------------------------------------------------------------------
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-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Mime
View raw message