Index: t/lib/TestApp.pm =================================================================== --- t/lib/TestApp.pm (revision 13172) +++ t/lib/TestApp.pm (revision 13192) @@ -18,7 +18,7 @@ our $VERSION = '0.01'; -TestApp->config( name => 'TestApp', root => '/some/dir' ); +TestApp->config( name => 'TestApp', root => '/some/dir', rfc3875_paths => 1 ); if ($::setup_leakchecker && eval { Class::MOP::load_class('CatalystX::LeakChecker'); 1 }) { with 'CatalystX::LeakChecker'; Index: t/aggregate/live_component_controller_args.t =================================================================== --- t/aggregate/live_component_controller_args.t (revision 13172) +++ t/aggregate/live_component_controller_args.t (revision 13192) @@ -73,15 +73,15 @@ my $response; - ok( $response = request("http://localhost/args/args/$path"), "Requested args for path $path"); + ok( $response = request("http://localhost/args/args/$path"), "Requested /args/args/$path"); is( $response->content, $test, "$test as args" ); undef $response; - ok( $response = request("http://localhost/args/params/$path"), "Requested params for path $path"); + ok( $response = request("http://localhost/args/params/$path"), "Requested /args/params/$path"); - is( $response->content, $test, "$test as params" ); + is( $response->content, $test, "response content $test as params" ); undef $response; Index: t/aggregate/unit_core_engine_cgi-prepare_path.t =================================================================== --- t/aggregate/unit_core_engine_cgi-prepare_path.t (revision 13172) +++ t/aggregate/unit_core_engine_cgi-prepare_path.t (revision 13192) @@ -13,8 +13,8 @@ SCRIPT_NAME => '/comics/dispatch.cgi', REQUEST_URI => '/comics/', ); - is ''.$r->uri, 'http://www.foo.com/comics/'; - is ''.$r->base, 'http://www.foo.com/comics/'; + is ''.$r->uri, 'http://www.foo.com/comics/', 'uri is correct'; + is ''.$r->base, 'http://www.foo.com/comics/', 'base is correct'; } # mod_rewrite to sub path under app root for non / based app @@ -46,8 +46,8 @@ SCRIPT_NAME => '/~bobtfish/Gitalist/script/gitalist.cgi', REQUEST_URI => '/~bobtfish/Gitalist/script/gitalist.cgi/%252F/%252F', ); - is ''.$r->uri, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/%252F/%252F'; - is ''.$r->base, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/'; + is ''.$r->uri, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/%252F/%252F', 'uri correct'; + is ''.$r->base, 'http://www.foo.com/~bobtfish/Gitalist/script/gitalist.cgi/', 'base correct'; } # Using rewrite rules to ask for a sub-path in your app. @@ -81,9 +81,9 @@ SCRIPT_NAME => '/oslobilder/', REQUEST_URI => '/oslobilder/%22foo%22', ); - is ''.$r->path, '%22foo%22'; - is ''.$r->uri, 'http://www.foo.com/oslobilder/%22foo%22'; - is ''.$r->base, 'http://www.foo.com/oslobilder/'; + is ''.$r->path, '%22foo%22', 'path correct'; + is ''.$r->uri, 'http://www.foo.com/oslobilder/%22foo%22', 'uri correct'; + is ''.$r->base, 'http://www.foo.com/oslobilder/', 'base correct'; } { @@ -92,9 +92,9 @@ SCRIPT_NAME => '/tx', REQUEST_URI => '/login', ); - is ''.$r->path, 'auth/login'; - is ''.$r->uri, 'http://www.foo.com/tx/auth/login'; - is ''.$r->base, 'http://www.foo.com/tx/'; + is ''.$r->path, 'auth/login', 'path correct'; + is ''.$r->uri, 'http://www.foo.com/tx/auth/login', 'uri correct'; + is ''.$r->base, 'http://www.foo.com/tx/', 'base correct'; } # test req->base and c->uri_for work correctly after an internally redirected request Index: lib/Catalyst.pm =================================================================== --- lib/Catalyst.pm (revision 13172) +++ lib/Catalyst.pm (revision 13192) @@ -1890,7 +1890,7 @@ sub get_actions { my $c = shift; $c->dispatcher->get_actions( $c, @_ ) } -=head2 $c->handle_request( $class, @arguments ) +=head2 $app->handle_request( @arguments ) Called to handle each HTTP request. Index: lib/Catalyst/Engine/CGI.pm =================================================================== --- lib/Catalyst/Engine/CGI.pm (revision 13172) +++ lib/Catalyst/Engine/CGI.pm (revision 13192) @@ -128,7 +128,6 @@ 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: @@ -155,19 +154,22 @@ # 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; + 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 && $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. + # 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; + $path_info = $req_uri; + } } }