ok …. the cleanurl.lua as shown in “Dr. Magneto vs Mr 404 handler” has a small issue.

Directories

Why directories? My blog decided to create a directory with the same name as one of my controller and suddenly ”/controller/” gave me 404. At the first moment i was … wtf … I enabled the last line for debugging and got the pointer. So here we are v4 of cleanurl.lua. :)

-- little helper function
function file_exists(path)
  local attr = lighty.stat(path)
  if (attr and attr["is_file"]) then
      return true
  else
      return false
  end
end

-- the magic ;)
if (not file_exists(lighty.env["physical.path"])) then
    -- file does not exist. check if we have a cached version
    lighty.env["physical.path"] = lighty.env["physical.path"] .. ".html" 

    if (not file_exists(lighty.env["physical.path"])) then
        -- file still missing. pass it to the fastcgi backend
        lighty.env["uri.path"] = "/dispatch.fcgi" 
        lighty.env["physical.rel-path"] = lighty.env["uri.path"]
        lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
    end
end
-- fallthrough will put it back into the lighty request loop
-- that means we get the 304 handling for free. ;)

-- debugging code
-- print ("final file is " ..  lighty.env["physical.path"])

download

The little helper saves us a little code duplication.