-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Jérémie,

On 2/20/15 4:48 AM, Jérémie Barthés wrote:
> "instead of just a snippet of "fixed" code"
> 
> Sorry Chris,i didn't read this.
> 
> How do you want me to provide the patch ?

Presumably, you have a copy of the source code. If you checked-out
from svn, just do this:

/path/to/tomcat-8.0.15 $ svn diff > patch.file

and post the patch file.

If you just downloaded the source in e.g. ZIP, tarball, etc., re-fetch
a pristine copy of the file and then do:

/path/to/tomcat-8.0.15 $ diff path/to/original/RewriteValve.java \
       java/org/apache/catalina/valves/rewrite/RewriteValve.java \
       > patch.file

- -chris

> Le 20/02/2015 10:31, Jérémie Barthés a écrit :
>> I send you the patch i did to fix my issue with the RewriteValve
>> (it was for the 8.0.15), The goal of that patch is to block the
>> RewriteValve if a 302 automatic folder '/' redirection occurs.
>> The RewriteValve will rewrite the redirected URL.
>> 
>> first step : http://localhost:8080/mypath/async => rewritten to 
>> http://localhost:8080/examples/jsp/async, 302 redirection
>> occurs, rollback and redirect to
>> http://localhost:8080/mypath/async/ second step : now the server
>> receive http://localhost:8080/mypath/async/ => forward to
>> http://localhost:8080/examples/jsp/async/ mission complete
>> 
>> The patch may be a little bit dirty since it the first time i add
>> code into tomcat and i don't understand all of this.
>> 
>> It starts at the line 481 of the RewriteValve.java
>> 
>> //boolean to know if the rewritten resource is a folder and need
>> a redirection boolean folderRedirect = false; try{ 
>> request.getMappingData().recycle(); 
>> request.getConnector().getService().getMapper().map(request.getCoyoteRequest().serverName(),
>>
>> 
request.getCoyoteRequest().requestURI(),
>> null, request.getMappingData()); 
>> if(request.getMappingData().redirectPath.toString()!=null){ 
>> folderRedirect = true; } } catch (Exception e){ //ignore }
>> 
>> request.getMappingData().recycle(); // Reinvoke the whole request
>> recursively try { 
>> request.getConnector().getProtocolHandler().getAdapter().service 
>> (request.getCoyoteRequest(), response.getCoyoteResponse());
>> 
>> if(folderRedirect && response.getCoyoteResponse().getStatus() ==
>> 302){ 
>> if(!request.getCoyoteRequest().requestURI().getByteChunk().toString().endsWith("/")){
>>
>>
>> 
String requestParam =
>> request.getQueryString() == null ? "" : '?' +
>> request.getQueryString(); response.setHeader("Location", 
>> request.getCoyoteRequest().requestURI().getByteChunk().toString()
>> + '/' + requestParam); } } } catch (Exception e) { // This
>> doesn't actually happen in the Catalina adapter implementation }
>> 
>> 
>> Le 20/02/2015 09:34, Felix Schumacher a écrit :
>>> Am 20.02.2015 08:49, schrieb Rainer Jung:
>>>> Am 19.02.2015 um 22:13 schrieb Felix Schumacher:
>>>>> Am 19.02.2015 um 21:41 schrieb André Warnier:
>>>>>> Jérémie Barthés wrote: ...
>>>>>> 
>>>>>>> 
>>>>>>> Make a file rewrite.config in conf/Catalina/localhost/
>>>>>>> that contains : RewriteRule    ^/mypath/(.*)$
>>>>>>> /examples/jsp/$1
>>>>>>> 
>>>>>>> copy the line <Valve 
>>>>>>> className="org.apache.catalina.valves.rewrite.RewriteValve"
>>>>>>> /> in the conf/server.xml file, line 131
>>>>>>> 
>>>>>> 
>>>>>> Since this is a Valve, it will run before Tomcat attempts
>>>>>> to match the URL to an actual directory or webapp.
>>>>>> 
>>>>>>> 
>>>>>>> try the followings URLs :
>>>>>>> 
>>>>>> 
>>>>>> 1) http://localhost:8080/mypath/async
>>>>>> 
>>>>>> This matches the rewrite rule, so it will be rewritten to
>>>>>> URL
>>>>>> 
>>>>>> /examples/jsp/async
>>>>>> 
>>>>>> Then Tomcat will attempt to match this to a directory or
>>>>>> webapp, and find that
>>>>>> (catalina_base)/webapps/examples/jsp/async is a
>>>>>> directory. It will thus respond to the browser with a 302
>>>>>> re-direct to
>>>>>> 
>>>>>> http://localhost:8080/examples/jsp/async/
>>>>>> 
>>>>>> which is actually the "correct" URL. And this is what
>>>>>> will be shown in the browser URL bar. This, in my view,
>>>>>> is expected behaviour.  The server does that, so that
>>>>>> when an actual response is generated (for the correct
>>>>>> URL http://localhost:8080/examples/jsp/async/), the
>>>>>> browser can cache this response under the correct URL.
>>>>>> 
>>>>>> Then the browser re-issues a request for
>>>>>> 
>>>>>> http://localhost:8080/examples/jsp/async/
>>>>>> 
>>>>>> and that is when Tomcat will actually generate a "real"
>>>>>> response, because this time it is a correct URL. So the
>>>>>> response appears to the browser, as coming from
>>>>>> 
>>>>>> http://localhost:8080/examples/jsp/async/
>>>>>> 
>>>>>> which is correct.
>>>>>> 
>>>>>> 2) http://localhost:8080/mypath/async/
>>>>>> 
>>>>>> This also matches the rewrite rule, so it gets rewritten
>>>>>> to
>>>>>> 
>>>>>> http://localhost:8080/examples/jsp/async/
>>>>>> 
>>>>>> which is a correct URL. Thus Tomcat will immediately
>>>>>> generate a real response (without an intermediate 302
>>>>>> redirect), which will be appear in the browser URL bar as
>>>>>> a response to
>>>>>> 
>>>>>> http://localhost:8080/mypath/async/
>>>>>> 
>>>>>> This is also expected behaviour.
>>>>>> 
>>>>>> I believe that if you do not want to see the first
>>>>>> redirect URL
>>>>>> 
>>>>>> http://localhost:8080/examples/jsp/async/
>>>>>> 
>>>>>> in the browser, you have to modify your rewrite rules,
>>>>>> perhaps by using a RewriteCond with the -d flag, to check
>>>>>> first if the URL points to an existing directory, and if
>>>>>> yes add the terminating "/" yourself (with a RewriteRule)
>>>>>> before other rewrite tests/rules take place.
>>>>> This rewrite.config
>>>> 
>>>> ...
>>>> 
>>>>> will do the trick. I think -d will not work, since
>>>>> /mypath/async is not existant, it only "feels" like a
>>>>> directory.
>>>> 
>>>> Not clear: the implementation for "-d" is (case 0 below, from
>>>> file ResolverImpl.java):
>>>> 
>>>> 148     @Override 149     public boolean resolveResource(int
>>>> type, String name) { 150         WebResourceRoot resources = 
>>>> request.getContext().getResources(); 151         WebResource
>>>> resource = resources.getResource(name); 152         if
>>>> (!resource.exists()) { 153             return false; 154
>>>> } else { 155             switch (type) { 156             case
>>>> 0: 157                 return (resource.isDirectory()); 158
>>>> case 1: 159                 return (resource.isFile()); 160
>>>> case 2: 161                 return (resource.isFile() && 
>>>> resource.getContentLength() > 0); 162             default: 
>>>> 163                 return false; 164             } 165
>>>> } 166     }
>>>> 
>>>> Since it checks resources and the OP was actually talking
>>>> about a path that is a folder in his webapp, "-d" could
>>>> work.
>>> 
>>> Right, but given the examples and instructions from the op, it
>>> seems to me, that async (source) is not a directory.
>>> 
>>> I think the op wants to mimic [P] behaviour, which is not
>>> implemented and wants to point out that the valve behaves
>>> differently when operating on a directory like url and one that
>>> is not. In the former it will do an internal forward in the
>>> latter an external redirect.
>>> 
>>> As proxy mode is not supported and documented, I tend to say,
>>> that it is a mildly annoying inconsitency, but not a bug per
>>> se.
>>> 
>>> Regards Felix
>>> 
>>>> 
>>>> Regards,
>>>> 
>>>> Rainer
>>>> 
>>>> ---------------------------------------------------------------------
>>>>
>>>> 
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail:
>>>> users-h...@tomcat.apache.org
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>>
>>> 
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>>
>> 
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>> 
> 
> 
> ---------------------------------------------------------------------
>
> 
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJU52OrAAoJEBzwKT+lPKRYEMIP/i+iITuiZovejOUkx6dMB2AZ
nj61DU2MQOx2vOHObP3oyyKwvhK2/X26D/C7X9M0zhv5XvI8pEe/taD5JtsXeMFy
dSC7AsLts1Rd3raADT6d5c4QTvaoXhqoHVC8VfyBWk8s1VloMdzVj4sLNzoX6c59
xkPj7rlNyRIqiK02wDdkr1ApW1FtYjwIT2tdciE4JJzjSVZ4U0C81XDDfIsFLEZR
C8lHl/vQFohcTeh/xmM/7fDYwO2bqUi7pYN6pal7pijjzdZ1lQg+HietyD6no3ta
4HNTfu2Exz+beEvGwY3h0+wrAFwBlwleKdahHitW+Yi/6TMZiKfp9HpjAMcWJpcH
B1iKty8C64lmiwcqMKnU43D2rtUnu9sfGRXDcScl+85m2SYc/W7WUkrjN7hhldoe
B3u4FJ7fD28oWtHsNnAmQ9jdyCFvHWIumawuS5w+wg9OwcQbiUBs1R7p1CK5jxMw
IZnjZdSdtIWHBhNksHbfEsAcWsx6ZGF8Z55U1BllHaGQ6aLh0OacE+6qf87gDPVO
+TZRJA0mWOjxZ6I1SG8kuXjPQ7NfQwkmyLq3QrO77NF5USsD0z9fb+Y2w1rW4VJl
gw5BGdup7SuIkLqR/y6/J8KqvgDYXARZAUbuuTg87nzLBH/DgU+fQxY4O8T+pc62
mvHseJIiMJBmXZNfxE2G
=um4m
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to