Il modulo Apache mod_rewrite per riscrivere la URL
18/05/2011Il mod_rewrite è un modulo per Apache. Il modulo associa "al volo" un URL virtuale (non esisente) ad uno reale, tramite delle regole definite nei file .htaccess.
Per prima cosa occorre verificare se sul nostro hosting il modulo è attivo, quindi per provare creiamo una pagina info.php in cui inseriamo l'istruzione
phpinfo();
la carichiamo e richiamandola dal browser cerchiamo mod_rewrite nella sezione Loaded Modules. Se il modulo risulta caricato possimao proseguire.
Ma non basta, in alcuni hosting di basso livello potrebbe non essere abilitato l'uso del file .htaccess che invece è necessario.
Quindi prima di procedere testiamo il funzionamento di htaccess.
Con un editor di testo creiamo il file .htaccess in cui inseriamo le seguenti righe:
RewriteEngine On
RewriteRule ^test.html$ index.html [L]
salviamo e carichiamo sul server, e proviamo a richiamare dal browser la pagina test.html: in questo modo attraverso il mod_rewrite il browser cercherà di caricare il file fisico index.html (attenzione, il file index.html deve esistere sul nostro webserver, in caso contario sostituire nel file .htaccess il nome index.html con uno realmente esistente!).
Se l'uso di .htaccess è abilitato chiamando la pagina test.html che non esiste verremo reindirizzati su index.html.
Se entrambi i test hanno avuto esito positivo vediamo quali son le regole attraverso cui costruire un file .htaccess più articolato!
Dall'esempio semplice precedente ricaviamo che la prima linea attiva l'engine (e va sempre inserita!) mentre la seconda linea specifica una regola (RewriteRule) composta da:
l'URL da riscrivere, tra ^ (inizio stringa) e $ (fine stringa)
l'URL al quale verrà inviata realmente la richiesta
parametri (tra parentesi quadre, separati da virgole)
L significa "ultimo", paragonabile al break, dice all'engine di fermarsi e di non controllare le altre regole
Per trasformare un URL con query string costruiremo una regola tipo questa:
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)\.html$ index.php?id=$3&prod=$1&cat=$2
URL prima del rewrite (realmente esistente): www.domain.tld/index.php?id=$3&prod=$2&cat=$1
URL dopo il rewrite: www.domain.tld/monitor/samnsung/17.html
Abbiamo visto che la stringa da costruire va delimitata dai due caratteri ^ e $ al cui interno son inseriti questi 'elementi':
([^/]+) attraverso la reg exp cattura la stringa -qualsiasi carattere tranne lo slash in qualsiasi quantità- inviata col parametro $1
/ inseriamo una slash a simulare una sottodirectory
([^/]+) attraverso la reg exp cattura la stringa -qualsiasi carattere tranne lo slash in qualsiasi quantità- inviata col parametro $2
/ inseriamo una slash a simulare una sottodirectory
([0-9]+) attraverso la reg exp cattura il valore intero -uno o più (+) caratteri numerici da 0 a 9 ([0-9]- inviato col parametro $3
\.html indica ".html" (. è un metacarattere che vuol dire qualsiasi carattere, di conseguenza per passare . dobbiamo effettuare l'escape)
Bene, con queste indicazioni basilari siamo in grado di costruire tutti i redirect necessari a far scomparire dai nostri URl i file php e le relative query string, rendendo le nostre pagine più gradite ai motori di ricerca e aumentando il livello di sicurezza!
Attenzione, per ogni query string diversa per numero e tipo di parametri dovremo costruire una regola ad hoc, ricordandoci di inserire [L] solo al termine dell'ultima riga.
Per chi vuol approfondire questo è il link alla documentazione ufficiale.