Cerca nel sito

Rss Posts

Rss Comments

Login

 

mod_rewrite, riscrivere le URL dinamiche per i motori di ricerca

nov 25

Chi sviluppa siti utilizzando linguaggi dinamici come il PHP si sarà trovato di fronte più volte alla necessità di avere delle URL che siano in po' più leggibili dai motori di ricerca ma anche dai visitatori.

Recentemente Google ha smentito questa diceria affermando che il loro crawler è perfettamente in grado di leggere le URL del tipo miapagina.php?id=2&name=pippo.

Resta il fatto che sia a livello estetico, sia come mezzo di protezione da malintenzionati, la "riscrittura" delle URL può risultare utile.

Ma come si può ottenere un buon rewrite?

In questo post vedremo qualche piccolo esempio.
Come prima cosa è fondamentale sapere che il mod_rewrite è una caratteristica propria di Apache, il web server che solitamente trovate installato nei server Linux, anche in uno spazio hosting, anche se non tutti attivano questo modulo di default quindi informatevi bene prima di impazzire.

Uno dei metodi più diffusi per gestire le regole di rewrite è attraverso il famoso file .htaccess, la prima riga del nostro file sarà sempre

RewriteEngine on

e significa, utilizza e attiva il motore di rewrite, se disponibile, poi iniziano le regole vere e proprie

RewriteRule ^(.*)\.html$ $1.php [R=301,L]

questa ad esempio riscrive tutte le pagine php con estensione html ovvero se viene chiamata la pagina http://vostrosito.com/test.html in realtà verrà mostrata la pagina test.php pur lasciando il primo indirizzo nella barra degli indirizzi e quindi la pagina vista dal crawler. Le opzioni R=301 e L servono a dire di utilizzare un Redirect 301 (R=301) e fermarsi se la regola è soddisfatta senza passare alle regole successive (L).

Se invece abbiamo dei parametri possiamo utilizzare una struttura a directory e poi farle riscrivere dal mod_rewrite, così

RewriteRule ^([a-zA-Z]+)/test/([0-9]+)/[a-zA-Z0-9_-]+\.html$ test.php?lang=$1&param1=$2 [L]

in questo esempio abbiamo una struttura del tipo /en/test/21/prova.html dove la prima parte dell'espressione regolare ^([a-zA-Z]+) intende che all'inizio della URL ci sono dei caratteri alfanumerici seguiti da uno / la parola test un altro / dei numeri un altro / e una serie di lettere, numeri, _ oppure - e l'estensione .html

In pratica tra le parentesi tonde avviene il match e viene assegnato il valore alle varibili $1 e $2 per poi passarlo alla pagina test.php nell'ordine mostrato. Sembra una cosa complicata ma con qualche esperimento risulterà semplice ottenere facilmente grandi risultati.

Nei prossimi post vedremo alcuni esempi più complessi e una soluzione in ambiente Windows.

Per approfondire vi consiglio la documentazione ufficiale sul mod_rewrite da Apache.org e anche un cheatsheet su mod_rewrite molto utile