X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FCGI.pm;h=331d81492c54e7e18cd17e0814924170f5fd718a;hb=4903b59cd946a9dfd39a95d4e8b921676ea42098;hp=f9f9fa8114a589d6a956c711754acf291aba09ae;hpb=62b6b631cf9141ffd9ae02e4b87c182b080b335a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/CGI.pm b/lib/Catalyst/Engine/CGI.pm index f9f9fa8..331d814 100644 --- a/lib/Catalyst/Engine/CGI.pm +++ b/lib/Catalyst/Engine/CGI.pm @@ -128,7 +128,6 @@ sub prepare_path { else { $base_path = $script_name || '/'; } -# $base_path .= '/' unless $base_path =~ m{/$}; # If we are running as a backend proxy, get the true hostname PROXY_CHECK: @@ -158,15 +157,20 @@ sub prepare_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. - 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; } }