MOD_REWRITE RISCRIVERE L'URL
In questo articolo vedremo le basi di una tecnica molto diffusa ed utile ovvero
l’url rewrite. Si tratta di una funzionalità di Apache resa possibile dal modulo
mod_rewrite, implementabile e configurabile tramite una nostra vecchia conoscenza: i files
.htaccess. Il maggiore beneficio di riscrivere gli url é una
migliore indicizzazione da parte dei motori di ricerca. Pare infatti che gli
spider siano “disturbati” dalle query string (
?id=34&type=5&mod=user), in particolare se passano molti parametri.
Sei pronto dunque a calarti in questo misterioso ed affascinate campo del web?
Come avviene la traduzione dell’url?
Poniamo che nel nostro sito, la pagina
prodotti.php mostri un prodotto in base all’id passato nell’url.
http://www.tuosito.com/prodotti.php?id=79 |
Questa pagina mostra i dettagli del prodotto salvato nel database con id=79.
Con una semplice regola, possiamo riscrivere l’url in questo modo:
http://www.tuosito.com/prodotto-79.html |
Quello che dobbiamo fare é
dire ad Apache:
Quando trovi nell’url
prodotto seguito da un
trattino seguito da un
numero seguito da
.html, richiedi la pagina prodotti.php?id=
quelNumero
Come avrai intuito, bisognerà lavorare con le
espressioni regolari. Se ne sei a digiuno, non ti preoccupare.
Giustino ha scritto
un’ottima guida al riguardo.
Come dichiarare una regola?
Il modello generale per dichiarare una regola di rewrite é il seguente:
RewriteRule cosa-mi-aspetto-di-trovare-nella-barra-dell-url come-devo-tradurre-quello-che-trovo |
In primo luogo va inizializzato il motore del mod_rewrite con la dichiarazione
RewriteEngine On.
In seguito va dichiarata la regola (o le regole).
Ma passiamo alla pratica ed implementiamo quanto proposto nel paragrafo precedente.
Iniziamo a scrivere la pagina
prodotti.php che realizzeremo semplicemente così:
echo 'Questa pagina mostra il prodotto numero ' . $_GET['id']; |
Tanto basterà per verificare il corretto funzionamento della nostra regola.
Ora vediamo il file .htaccess che dovrà essere salvato nella stessa (o gerarchicamente superiore) cartella del file
prodotti.php.
RewriteRule ^prodotto-([0-9]+)\.html$ prodotti.php?id=$1 |
Quanto dice questa regola, é esattamente quello che abbiamo visto in
precedenza: Quando trovi nell’url qualcosa che inizia con (^ significa
inizio della stringa)
prodotto seguito da un
trattino seguito da un
numero di una o più cifre (+ significa uno o più) e che termina ($ significa fine della stringa) con
.html, richiedi la pagina
prodotti.php?id=quelNumero
$1 si riferisce infatti a quanto é stato trovato dalla prima (e in questo caso unica) sottostringa.
Ora impostando come url:
http://www.tuosito.com/prodotto-34.html |
Dovresti visualizzare a video la seguente scritta:
“Questa pagina mostra il prodotto numero 34.”
Un esempio con due parametri
Poniamo ora che la nostra pagina
prodotti.php dipenda da due parametri: l’id e la categoria del prodotto. L’URL originale potrebbe essere questo:
http://www.tuosito.com/prodotti.php?category=bevande&id=12 |
Mentre riscritto potrebbe avere questo aspetto:
http://www.tuosito.com/bevande/prodotto-12.html |
Vediamo dunque una possibile regola per poi commentarla:
RewriteRule ^([a-z]+)/prodotto-([0-9]+)\.html$ prodotti.php?category=$1&id=$2 |
Cosa dice questa regola?
Se trovi una stringa che inizia con uno o più
caratteri seguiti da / seguiti da
prodotto seguito da un
trattino seguito da un
numero di una o più cifre seguito da
.html, richiedi la pagina prodotti.php?category=
quelloCheHaiTrovatoNellaPrimaSottostringa&id=
quelloCheHaiTrovatoNallaSecondaSottostringa.
Modifichiamo il file
prodotti.php in modo da poter verificare il funzionamento anche di questo secondo esempio in questo modo:
echo 'Questa pagina mostra il prodotto numero ' . $_GET['id'] . ' appartenente alla categoria ' . $_GET['category']; |
Ora digitando l’url:
http://www.tuosito.com/bevande/prodotto-12.html |
Visualizzerai a video la seguente scritta
Questa pagina mostra il prodotto numero 12 appartenente alla categoria bevande.