ok …. the cleanurl.lua as shown in “Dr. Magneto vs Mr 404 handler” has a small issue.
DirectoriesWhy 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"])
The little helper saves us a little code duplication.