X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FCGI.pm;h=eefe701dd19f0519973498d41cec4b6bcdfcdd6c;hb=2d29e3de1b9368d2a2e78edd0f8ad0f82fad6976;hp=d2d041e244c6ab20773d8eaf79ceb32adb94ded0;hpb=294f78ca00792c3014ef0b70808fcb04ebe13c9c;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/CGI.pm b/lib/Catalyst/Engine/CGI.pm index d2d041e..eefe701 100644 --- a/lib/Catalyst/Engine/CGI.pm +++ b/lib/Catalyst/Engine/CGI.pm @@ -5,6 +5,7 @@ use base 'Catalyst::Engine'; use NEXT; use URI; +my $uri_proto=URI->new(); __PACKAGE__->mk_accessors('env'); =head1 NAME @@ -94,10 +95,10 @@ sub prepare_headers { local (*ENV) = $self->env || \%ENV; # Read headers from %ENV - while ( my ( $header, $value ) = each %ENV ) { + foreach my $header ( keys %ENV ) { next unless $header =~ /^(?:HTTP|CONTENT|COOKIE)/i; ( my $field = $header ) =~ s/^HTTPS?_//; - $c->req->headers->header( $field => $value ); + $c->req->headers->header( $field => $ENV{$header} ); } } @@ -112,7 +113,14 @@ sub prepare_path { my $scheme = $c->request->secure ? 'https' : 'http'; my $host = $ENV{HTTP_HOST} || $ENV{SERVER_NAME}; my $port = $ENV{SERVER_PORT} || 80; - my $base_path = $ENV{SCRIPT_NAME} || '/'; + my $base_path; + if ( exists $ENV{REDIRECT_URL} ) { + $base_path = $ENV{REDIRECT_URL}; + $base_path =~ s/$ENV{PATH_INFO}$//; + } + else { + $base_path = $ENV{SCRIPT_NAME} || '/'; + } # If we are running as a backend proxy, get the true hostname PROXY_CHECK: @@ -130,10 +138,10 @@ sub prepare_path { $port = $c->request->secure ? 443 : 80; } - my $path = $base_path . $ENV{PATH_INFO}; + my $path = $base_path . ( $ENV{PATH_INFO} || '' ); $path =~ s{^/+}{}; - my $uri = URI->new; + my $uri = $uri_proto->clone; $uri->scheme($scheme); $uri->host($host); $uri->port($port);