sub _wrapped_legacy_psgi_app {
my ($app, $psgi_app) = @_;
- return Plack::Middleware::Conditional->wrap(
+ $psgi_app = Plack::Middleware::Conditional->wrap(
$psgi_app,
builder => sub { Plack::Middleware::ReverseProxy->wrap($_[0]) },
condition => sub {
|| $app->config->{using_frontend_proxy};
},
);
+
+ # If we're running under Lighttpd, swap PATH_INFO and SCRIPT_NAME
+ # http://lists.scsys.co.uk/pipermail/catalyst/2006-June/008361.html
+ # Thanks to Mark Blythe for this fix
+ #
+ # Note that this has probably the same effect as
+ # Plack::Middleware::LighttpdScriptNameFix and we should switch to that if
+ # we can.
+ $psgi_app = Plack::Middleware::Conditional->wrap(
+ $psgi_app,
+ builder => sub {
+ my ($to_wrap) = @_;
+ return sub {
+ my ($env) = @_;
+ $env->{PATH_INFO} ||= delete $env->{SCRIPT_NAME};
+ return $to_wrap->($env);
+ };
+ },
+ condition => sub {
+ my ($env) = @_;
+ my $server = $env->{SERVER_SOFTWARE};
+ return unless $server;
+ return $server =~ /lighttpd/ ? 1 : 0;
+ },
+ );
+
+ $psgi_app = Plack::Middleware::Conditional->wrap(
+ $psgi_app,
+ builder => sub {
+ my ($to_wrap) = @_;
+ return sub {
+ my ($env) = @_;
+
+ my @script_name = split(m!/!, $env->{PATH_INFO});
+ my @path_translated = split(m!/|\\\\?!, $env->{PATH_TRANSLATED});
+ my @path_info;
+
+ while ($script_name[$#script_name] eq $path_translated[$#path_translated]) {
+ pop(@path_translated);
+ unshift(@path_info, pop(@script_name));
+ }
+
+ unshift(@path_info, '', '');
+
+ $env->{PATH_INFO} = join('/', @path_info);
+ $env->{SCRIPT_NAME} = join('/', @script_name);
+
+ return $to_wrap->($env);
+ };
+ },
+ condition => sub {
+ my ($env) = @_;
+ my $server = $env->{SERVER_SOFTWARE};
+ return unless $server;
+ return $server =~ /IIS\/[6-9]\.[0-9]/ ? 1 : 0;
+ },
+ );
+
+ return $psgi_app;
}
=head2 $c->psgi_app