LighttpdとFastCGIで、静的・動的ファイルを俺的に振り分ける

あまり「static/以下は静的」みたいな振り分け方は好きではなくて、「拡張子が有ったら静的・無かったら動的」として振り分けるようにしています。

Lighttpd + FastCGIだとこんな感じで「拡張子を含まないリクエストをfastcgiで処理する」という条件でできました。

$HTTP["url"] =~ "/[^/\.]*(\?|$)" {    # "/[^/\.]*(\?.*)?$"でもOK
    fastcgi.server = ( "" =>
        (( "socket" => "/var/run/lighttpd_fastcgi.socket",
           "check-local" => "disable",
        ))
    )
}

Apache + ModPerlだと、これとは逆に「全てをmodperlで処理し、拡張子があるものだけはdefault-handlerで処理する」と書かないといけません→Catalyst::Request#pathの値に、LocationMatchでマッチした文字列がくっつく - ヒルズで働く@robarioの技ログ


「"" =>」の部分(ドキュメントには「」と書かれている部分)を最初は「"/"=>」としていたのですが、それだと「/foo/bar/baz」へリクエストした場合Catalystには「/bar/baz」が渡ってしまいました。http://www.typemiss.net/blog/kounoike/20060226-73を参考に、また

fastcgi.debug = 1
debug.log-request-handling = "enable"

デバッグしながら調べたところ、「""=>」とするとCatalystに「/foo/bar/baz」が渡るようになりました。