Layer 06

Apache Mod_rewrite

Il modulo in questione è già installato nel pacchetto base di apache dalla versione 2, basta solo abilitarlo all’interno del httpd.conf Inserite queste righe nel file httpd.conf alla dichiarazione vhost:

RewriteEngine on
RewriteLog /path/del/logs/server.rewrite.txt
RewriteLogLevel 1

Il log del rewrite, se quest’ultimo è molto utilizzato, è molto pesante quindi non abusatene, in genere basta la prima riga. La prima prova che si può fare con il rewrite è un semplice redirect senza tanti voli pindalici, ad esempio voglio che una pagina php mi diventi una cartella:

RewriteRule ^/biogarphy.php /biography/ [R=301]

in questo caso quando viene richiesta la pagine biography.php si viene redirezionati (nel modo più trasparente possibile) verso la cartella /biography/, senza dover creare o spostare files vari.
Se esiste un file /biography.php esso viene ignorato in quanto il rewrite viene prima di qualsiasi altra cosa.
Alla fine nel nostro browser (o quello dell’utente finale) rimarrà il file.php ma noi sappiamo che invece è andato a leggere la pagina iniziale della cartella biography. Possiamo poi tramite questo codice:

RewriteRule ^/(.+)/?$ /content/$1 [L]

Fare in modo che tutte le chiamate alla root e le successive non facciano riferimento alla cartella / ma alla cartella /content. Quindi una chiamata a /disclaimer.php andrà a finire tradotta /content/disclaimer.php Possiamo anche passare dei parametri, nomi di file e quant’altro con delle semplici e basilari regexp:

RewriteRule ^/articolo.php/(.*)$ /mioCMS/articolo.php?id=$1 [NE]
RewriteRule ^/articolo.php/(.*)/$ /mioCMS/articolo.php?id=$1 [NE]

Con questa regolina dico al modulo di tradurre tutte gli URL che iniziano con /articolo.php/qualsiasinumero nell’url dello script che visualizza l’ipotetico articolo, in questo modo abbrevio l’url e allo stesso tempo passo i parametri giusti al mio script senza bisogno del fastidioso punto di domanda. Adesso possiamo dare spazio alla fantasia, cioè adesso possiamo veramente tradure qualcosa che non assomiglia per nulla al’url finale con qualcosa di leggibile.

RewriteRule ^/HardCoded/(.*)/(.*)/(.*)/(.*)/$ /index.php?$1=$2&$3=$4

oppure

RewriteRule ^/HardCoded/(.*)/(.*)/(.*)/(.*)/$ /index.php?id=$1&categ=$2&action=$3&lang=$4

A che serve? innanzi tutto dobbiamo pensare a che non tutti quelli che visitano il nostro sito sono delle brave persone e che spesso (molto più di quanto si pensi) deducono dall’url quante èiù informazioni possibile, ad esempio il tipo di cms utilizzato o che script abbiamo installato per il forum, o addirittura deducono in che modo abbiamo organizzato il sito se in categorie o meno e tante altre cosine, mod_rewrite ci da la possibilità di nascondere la maggior parte delle informazioni al’utente che viene a visitare.
Poi dopo aver dato un’occhiata alla sicurezza del nostro sito, possiamo anche pensare a farci belli davanti ai motori di ricerca che non si troveranno davanti ad un sito fatto da pagine dinamiche dove basta cambiare un parametrino e cambia il contenuto, bensì di troveranno davanti ad un sito fatto di mille cartelle tutte differenti. Quest’articolo è un piccolo passaggio della guida, vi do qualche riferimento per capirne di più.
http://www.engelschall.com/pw/apache/rewriteguide/
http://httpd.apache.org/docs/mod/mod_rewrite.html
http://httpd.apache.org/docs/misc/rewriteguide.html
]]>

Nessun commento “Apache Mod_rewrite”