use strict;
use base qw[Catalyst::Engine Catalyst::Engine::Apache];
+use File::Spec;
use URI;
use URI::http;
$c->request->protocol( $c->apache->protocol );
$c->request->user( $c->apache->user );
- if ( $ENV{HTTPS} || $c->apache->get_server_port == 443 ) {
+ if ( $ENV{HTTPS} && uc( $ENV{HTTPS} ) eq 'ON' ) {
+ $c->request->secure(1);
+ }
+
+ if ( $c->apache->get_server_port == 443 ) {
$c->request->secure(1);
}
}
# not <Directory> directive
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 ( $c->apache->filename && -f $c->apache->filename && -x _ ) {
+
+ my $filename = ( File::Spec->splitpath( $c->apache->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)
=cut
-sub run { }
+sub run { shift->handler(@_) }
=back