# Modified from the original to store the regexp in a constant, to simplify # the removable of the trailing slash, and to utilize Rack to rebuild the URL. module Rack class TrailingSlash HAS_TRAILING_SLASH = %r{^/(.*)/$} def initialize(app) @app = app end def call(env) if env['PATH_INFO'] =~ HAS_TRAILING_SLASH env['PATH_INFO'].chomp!('/') [301, {"Location" => Rack::Request.new(env).url}, []] else @app.call(env) end end end end # NOTE: real-world experience shows this may not work if used behind Varnish, # because the port will be changed due to the proxy_pass...