De-uglify a comment
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 972b390..6c1ef1e 100644 (file)
@@ -36,6 +36,7 @@ use Carp qw/croak carp shortmess/;
 use Try::Tiny;
 use Plack::Middleware::Conditional;
 use Plack::Middleware::ReverseProxy;
+use Plack::Middleware::IIS6ScriptNameFix;
 
 BEGIN { require 5.008004; }
 
@@ -2654,7 +2655,7 @@ sub _setup_psgi_app {
 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 {
@@ -2664,6 +2665,57 @@ sub _wrapped_legacy_psgi_app {
                 || $app->config->{using_frontend_proxy};
         },
     );
+
+    my $server_matches = sub {
+        my ($re) = @_;
+        return sub {
+            my ($env) = @_;
+            my $server = $env->{SERVER_SOFTWARE};
+            return unless $server;
+            return $server =~ $re ? 1 : 0;
+        };
+    };
+
+    # 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,
+        condition => $server_matches->(qr/lighttpd/),
+        builder   => sub {
+            my ($to_wrap) = @_;
+            return sub {
+                my ($env) = @_;
+                $env->{PATH_INFO} ||= delete $env->{SCRIPT_NAME};
+                return $to_wrap->($env);
+            };
+        },
+    );
+
+    $psgi_app = Plack::Middleware::Conditional->wrap(
+        $psgi_app,
+        condition => $server_matches->(qr/^nginx/),
+        builder   => sub {
+            my ($to_wrap) = @_;
+            return sub {
+                my ($env) = @_;
+                my $script_name = $env->{SCRIPT_NAME};
+                $env->{PATH_INFO} =~ s/^$script_name//g;
+                return $to_wrap->($env);
+            };
+        },
+    );
+
+    # we're applying this unconditionally as the middleware itself already makes
+    # sure it doesn't fuck things up if it's not running under one of the right
+    # IIS versions
+    $psgi_app = Plack::Middleware::IIS6ScriptNameFix->wrap($psgi_app);
+
+    return $psgi_app;
 }
 
 =head2 $c->psgi_app