X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FCGI.pm;h=a8a2b1b5d4d4f94bdf5b546482a687c20a7b57df;hb=d827e95c0b05a17a62d4cb911b70621708c8753e;hp=3f2ef67d3d13bf700c782b18038a5488264d6786;hpb=e8b299689361f7f8538d0f7adf70fc86fecba8b2;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/CGI.pm b/lib/Catalyst/Engine/CGI.pm index 3f2ef67..a8a2b1b 100644 --- a/lib/Catalyst/Engine/CGI.pm +++ b/lib/Catalyst/Engine/CGI.pm @@ -154,27 +154,32 @@ 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 (my $req_uri = $ENV{REQUEST_URI}) { -# $req_uri =~ s/^\Q$base_path\E//; -# $req_uri =~ s/\?.*$//; -# if ($req_uri && $req_uri ne '/') { - # 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. -# 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; -# } -# } - $path_info =~ s/%2F/%252F/g; + if ($c->config->{rfc3875_paths}) { + if (my $req_uri = $ENV{REQUEST_URI}) { + $req_uri =~ s/^\Q$base_path\E//; + $req_uri =~ s/\?.*$//; + 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. + 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; + } + } + } + # set the request URI - warn("Base path $base_path, path_info $path_info"); my $path = $base_path . ( $path_info || '' ); $path =~ s{^/+}{}; - $base_path .= '/' unless $base_path =~ m{/$}; # Using URI directly is way too slow, so we construct the URLs manually my $uri_class = "URI::$scheme";