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