sourCEntral - mobile manpages




Plack::Middleware::Static − serve static files with Plack


  use Plack::Builder;
  builder {
      enable "Plack::Middleware::Static",
          path => qr{^/(images|js|css)/}, root => './htdocs/';


This middleware allows your Plack-based application to serve static files.

Note that if you are building an app using Plack::App::URLMap, you should consider using Plack::App::File to serve static files instead. This makes the overall routing of your application simpler to understand.

With this middleware, if a static file exists for the requested path, it will be served. If it does not exist, by default this middleware returns a 404, but you can set the "pass_through" option to change this behavior.

If the requested document is not within the "root" or the file is there but not readable, this middleware will return a 403 Forbidden response.

The content type returned will be determined from the file extension by using Plack::MIME.


path, root

  enable "Plack::Middleware::Static",
      path => qr{^/static/}, root => 'htdocs/';

The "path" option specifies the URL pattern (regular expression) or a callback to match against requests. If the <path> option matches, the middleware looks in "root" to find the static files to serve. The default value of "root" is the current directory.

This example configuration serves "/static/foo.jpg" from "htdocs/static/foo.jpg". Note that the matched portion of the path, "/static/", still appears in the locally mapped path under "root". If you don’t want this to happen, you can use a callback to munge the path as you match it:

  enable "Plack::Middleware::Static",
      path => sub { s!^/static/!! }, root => 'static−files/';

The callback should operate on $_ and return a true or false value. Any changes it makes to $_ are used when looking for the static file in the "root".

The configuration above serves "/static/foo.png" from "static−files/foo.png", not "static−files/static/foo.png". The callback specified in the "path" option matches against $_ munges this value using "s///". The subsitution operator returns the number of matches it made, so it will return true when the path matches "^/static".

If you want to map multiple static directories from different roots, simply add this middleware multiple times with different configuration options.


When this option is set to a true value, then this middleware will never return a 404 if it cannot find a matching file. Instead, it will simply pass the request on to the application it is wrapping.


Tokuhiro Matsuno, Tatsuhiko Miyagawa


Plack::Middleware Plack::Builder