X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FApache%2FBase.pm;fp=lib%2FCatalyst%2FEngine%2FApache%2FBase.pm;h=d32b2464b193d11ba218764ded83e766177f1cef;hb=fc88e4951e53e4492c168fc5ffd2a0516e50346b;hp=d40f0509681f0ae73cf53f4a6a50131b89648a7f;hpb=566ee5d777a655fce380b8fe864a99809f7c8e04;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/Apache/Base.pm b/lib/Catalyst/Engine/Apache/Base.pm index d40f050..d32b246 100644 --- a/lib/Catalyst/Engine/Apache/Base.pm +++ b/lib/Catalyst/Engine/Apache/Base.pm @@ -3,6 +3,7 @@ package Catalyst::Engine::Apache::Base; use strict; use base qw[Catalyst::Engine Catalyst::Engine::Apache]; +use File::Spec; use URI; use URI::http; @@ -101,33 +102,55 @@ sub prepare_headers { sub prepare_path { my $c = shift; - my $base; + { + my $path = $c->apache->uri; + + if ( my $location = $c->apache->location ) { + + if ( index( $path, $location ) == 0 ) { + $path = substr( $path, length($location) ); + } + } + + $path =~ s/^\///; + + if ( my $filename = $c->apache->filename ) { + + $filename = ( File::Spec->splitpath($filename) )[2]; + + if ( index( $path, $filename ) == 0 ) { + $path = substr( $path, length($filename) ); + } + } + + $path =~ s/^\///; + + $c->request->path($path); + } + { my $scheme = $c->request->secure ? 'https' : 'http'; my $host = $c->apache->hostname; my $port = $c->apache->get_server_port; - my $path = $c->apache->location || '/'; + my $path = $c->apache->uri; + if ( length( $c->request->path ) ) { + $path =~ s/\/$//; + $path = substr( $path, 0, length($path) - length($c->req->path) ); + } + unless ( $path =~ /\/$/ ) { $path .= '/'; } - $base = URI->new; + my $base = URI->new; $base->scheme($scheme); $base->host($host); $base->port($port); $base->path($path); - - $base = $base->canonical->as_string; + + $c->request->base( $base->canonical->as_string ); } - - my $location = $c->apache->location || '/'; - my $path = $c->apache->uri || '/'; - $path =~ s/^($location)?\///; - $path =~ s/^\///; - - $c->req->base($base); - $c->req->path($path); } =item $c->prepare_request($r) @@ -143,7 +166,7 @@ sub prepare_request { =cut -sub run { } +sub run { shift->handler(@_) } =back