Lighttpd Rewrites για το Joomla

Εισαγωγή

Ο Lighttpd είναι ο web-server που χρησιμοποιούμε για να παρέχουμε τις υπηρεσίες hosting και ο οποίος σχεδιάστηκε με γνώμονα την ασφάλεια, ταχύτητα, ευελιξία και συμβατότητα με τα περισσότερα λειτουργικά συστήματα. Για τη λειτουργία rewrites, ο Lighttpd δεν χρησιμοποιεί την ίδια σύνταξη με τον Apache, αλλά έχει το δικό του plugin ώστε να κάνει ο ίδιος τα rewrites ή μπορεί να γίνει και χρήση άλλων γλωσσών προγραμματισμού ώστε να κάνουν αυτές τα rewrites. Πριν λίγα χρόνια είχα δημοσιεύσει τα rewrites ώστε να δουλεύει η επιλογή "Search Engine Friendly URLs" στο Joomla και μπορείτε να τα βρείτε στο lighttpd wiki. Για τα συγκεκριμένα rewrites έγινε χρήση του ModMagnet και της γλώσσας προγραμματισμού LUA. Παρακάτω θα σας δείξω βελτιωμένα rewrites ώστε να μην στέλνουν στο index.php του Joomla συγκεκριμένες καταλήξεις (π.χ. jpg, gif, png, css, js).

Πλεονεκτήματα

Για να καταλάβατε το πλεονέκτημα αυτού σκεφτείτε ότι διαγράφετε κάποιες εικόνες. Σκεφτείτε τώρα να επισκεφτεί μια μηχανή αναζήτησης την ιστοσελίδα σας ή κάποιο blog με μεγάλη επισκεψιμότητα χρησιμοποιεί τις εικόνες σας που πλέον δεν υπάρχουν. Με τα παλιά rewrites γίνεται έλεγχος για το εάν υπάρχει κάποιο αρχείο και εάν δεν υπάρχει το στέλνει στο index.php ενώ με τα καινούργια όχι. Έτσι δεν γίνεται υπερφόρτωση της PHP.

Ρυθμίσεις

Θα πρέπει να προσθέσετε τον παρακάτω κώδικα στο αρχείο /usr/local/etc/lighttpd/joomla.lua

View source
function file_exists(path)
	local attr = lighty.stat(path)
	if (attr) then
		return true
	else
		return false
	end
end
 
function removePrefix(str, prefix)
	return str:sub(1,#prefix+1) == prefix.."/" and str:sub(#prefix+2)
end
 
function file_excludes(filename)
	local extensions = {jpg = true; gif = true; png = true; jpeg = true; js = true; css = true; txt = true};
	if extensions[(filename:match"%.(.-)$" or ""):lower()] then
		return true
	else
		return false
	end
end
 
local prefix = ''
 
if (not file_excludes(lighty.env["physical.rel-path"])) then
	if (not file_exists(lighty.env["physical.path"])) then
		request_uri = removePrefix(lighty.env["uri.path"], prefix)
		if request_uri then
			lighty.env["uri.path"] = prefix .. "/index.php"
			local uriquery = lighty.env["uri.query"] or ""
			lighty.env["uri.query"] = uriquery
			lighty.env["physical.rel-path"] = lighty.env["uri.path"]
			lighty.env["request.orig-uri"] = lighty.env["request.uri"]
			lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
		end
	end
end

και στη συνέχεια να προσθέσετε στο lighttpd.conf την παρακάτω ρύθμιση:

View source
$HTTP["url"] !~ "^/(|index.html|xcache-admin|awstatsclasses|awstatsicons|awstatscss|awstats|webmail|phpmyadmin)(/|$)" {
index-file.names = ( "index.php" )
magnet.attract-physical-path-to = ( "/usr/local/etc/lighttpd/joomla.lua" )