X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FCGI.pm;h=cabd343618c670ad1618cf2aa884a92a56e16f90;hb=8aa39973c1148499ceef41b27c74a31420e8c3bc;hp=f00268bd9ad9ad9a4ca7521014280b089cb06fa4;hpb=eb3abf9698d6eb550497284482f36a315e856091;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/CGI.pm b/lib/Catalyst/Engine/CGI.pm index f00268b..cabd343 100644 --- a/lib/Catalyst/Engine/CGI.pm +++ b/lib/Catalyst/Engine/CGI.pm @@ -157,7 +157,22 @@ sub prepare_path { if (my $req_uri = $ENV{REQUEST_URI}) { $req_uri =~ s/^\Q$base_path\E//; $req_uri =~ s/\?.*$//; - $path_info = $req_uri if $req_uri; + 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 $idx = index($path_info, $match) + length($match); + my $path_info_part = substr($path_info, 0, $idx); + substr($req_uri, 0, length($match), $path_info_part); + } + $path_info = $req_uri; + } } # set the request URI