I hate this name less. Others may feel differently
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / CGI.pm
index 318240d..a2d3255 100644 (file)
@@ -154,20 +154,24 @@ sub prepare_path {
     # See https://issues.apache.org/bugzilla/show_bug.cgi?id=35256
     # Here we try to resurrect the original encoded URI from REQUEST_URI.
     my $path_info   = $ENV{PATH_INFO};
-    if ($c->config->{rfc3875_paths}) {
+    if ($c->config->{use_request_uri_for_path}) {
         if (my $req_uri = $ENV{REQUEST_URI}) {
             $req_uri =~ s/^\Q$base_path\E//;
             $req_uri =~ s/\?.*$//;
-            if ($req_uri && $req_uri ne '/') {
+            if ($req_uri) {
+                # Note that if REQUEST_URI doesn't start with a /, then the user
+                # is probably using mod_rewrite or something to rewrite requests
+                # into a sub-path of their application..
                 # This means that REQUEST_URI needs information from PATH_INFO
                 # prepending to it to be useful, otherwise the sub path which is
                 # being redirected to becomes the app base address which is
                 # incorrect.
-                # FIXME - This stuff is shit, we should get REDIRECT_URI, right?
-                my ($match) = $req_uri =~ m{^(/?[^/]+)};
-                my ($path_info_part) = $path_info =~ m|^(.*?\Q$match\E)|;
-                substr($req_uri, 0, length($match), $path_info_part)
-                    if $path_info_part;
+                if (substr($req_uri, 0, 1) ne '/') {
+                    my ($match) = $req_uri =~ m|^([^/]+)|;
+                    my ($path_info_part) = $path_info =~ m|^(.*?\Q$match\E)|;
+                    substr($req_uri, 0, length($match), $path_info_part)
+                        if $path_info_part;
+                }
                 $path_info = $req_uri;
             }
         }