Hi,

I send you the patch from 8.0.15
Tell me if it doesn't match with what you expected
Kind regards,

Jérémie


Index: RewriteValve.java
===================================================================
--- RewriteValve.java    (revision 1661627)
+++ RewriteValve.java    (working copy)
@@ -45,6 +45,11 @@
 import org.apache.catalina.connector.Response;
 import org.apache.catalina.util.LifecycleSupport;
 import org.apache.catalina.valves.ValveBase;
+import org.apache.catalina.valves.rewrite.Resolver;
+import org.apache.catalina.valves.rewrite.ResolverImpl;
+import org.apache.catalina.valves.rewrite.RewriteCond;
+import org.apache.catalina.valves.rewrite.RewriteMap;
+import org.apache.catalina.valves.rewrite.RewriteRule;
 import org.apache.tomcat.util.buf.CharChunk;
 import org.apache.tomcat.util.buf.MessageBytes;
 import org.apache.tomcat.util.net.URL;
@@ -472,11 +477,31 @@
                         chunk.append(host.toString());
request.getCoyoteRequest().serverName().toChars();
                     }
+
+                    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 18:03, Konstantin Kolinko a écrit :
2015-02-20 19:41 GMT+03:00 Christopher Schultz <ch...@christopherschultz.net>:
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
The above command shall use "diff -u" to generate Unified Diff format.

Documentation:
http://tomcat.apache.org/bugreport.html#How_to_submit_patches_and_enhancement_requests

Best regards,
Konstantin Kolinko

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


Index: RewriteValve.java
===================================================================
--- RewriteValve.java   (revision 1661627)
+++ RewriteValve.java   (working copy)
@@ -45,6 +45,11 @@
 import org.apache.catalina.connector.Response;
 import org.apache.catalina.util.LifecycleSupport;
 import org.apache.catalina.valves.ValveBase;
+import org.apache.catalina.valves.rewrite.Resolver;
+import org.apache.catalina.valves.rewrite.ResolverImpl;
+import org.apache.catalina.valves.rewrite.RewriteCond;
+import org.apache.catalina.valves.rewrite.RewriteMap;
+import org.apache.catalina.valves.rewrite.RewriteRule;
 import org.apache.tomcat.util.buf.CharChunk;
 import org.apache.tomcat.util.buf.MessageBytes;
 import org.apache.tomcat.util.net.URL;
@@ -472,11 +477,31 @@
                         chunk.append(host.toString());
                         request.getCoyoteRequest().serverName().toChars();
                     }
+                    
+                    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
                     }
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to