Lighttpd sets wrong SCRIPT_NAME and PATH_INFO if you mount your FastCGI app at “/”. This can be fixed by using this middleware:
class LighttpdScriptNameFix def initialize(app) @app = app end def call(env) env["PATH_INFO"] = env["SCRIPT_NAME"].to_s + env["PATH_INFO"].to_s env["SCRIPT_NAME"] = "" @app.call(env) end end
Of course, use this only when your app runs at “/”.
Since lighttpd 1.4.23, you also can use the “fix-root-scriptname” flag in fastcgi.server.