Con il termine Friendly URL (spesso abbreviato con FURL) si intende un indirizzo chiaramente leggibile, identificabile, memorizzabile dal visitatore, ma anche chiaro e indicativo per i motori di ricerca.

Procediamo con ordine.
Diamo per scontata la familiarità con gli url dinamici tipo:

http://guide.dev2web.org/?pageid=23

Questo tipo di url non è particolarmente “amichevole” per il visitatore: oltre all’indirizzo del sito, va identificato il nome del parametro (pageid) e il suo valore (23). URL come quello in esempio sono decisamente poco eleganti e difficilmente memorizzabili dai visitatori del sito… ma non è questo il problema più grosso.

È stato più volte provato quanto gli url statici siano più graditi ai motori di ricerca e quanto sia importante che siano descrittivi della pagina quando si lavora sul posizionamento.

Nel 2008 Google ha pubblicato un interessante articolo intitolato Dynamic URLs vs. static URLs che chiarisce la posizione dell’ormai popolarissimo motore di ricerca e per riflesso quella di tutti gli altri.
Google suggerisce che molti spider dei motori di ricerca non amano gli url dinamici tanto quanto quelli statici.

Qualche anno fa (come già scritto qui) i motori di ricerca indicizzavano soltanto la pagina principale, tralasciando ogni qualsivoglia parametro. Col tempo e con il crescere dell’uso di linguaggi server-side la mancata indicizzazione di indirizzi di questo tipo, oggi, è un difetto appartenente solo ai motori di ricerca scadenti.

La versione statica o friendly del precedente indirizzo è qualcosa tipo:

http://guide.dev2web.org/contatti

Uso di mod_rewrite

Vediamo come poter ottenere un buon indirizzo usando la tecnica di rewrite dell’url usando mod_rewrite, un’estensione del server web Apache.

Il mod_rewrite funziona tramite uno speciale file di testo, .htaccess che può contenere svariate le regole. Esaminiamo quelle necessarie per ottenere la riscrittura dell’url con un esempio:

#Attiva il Rewrite Engine
RewriteEngine on
#Verifica che quello che cerchiamo non sia un file esistente
RewriteCond %{REQUEST_FILENAME} !-f
#Verifica che quello che cerchiamo non sia una directory esistente
RewriteCond %{REQUEST_FILENAME} !-d
#Verifica che il file non sia index.php per evitare problemi di loop
RewriteCond %{REQUEST_URI} !^index.php$
#Forza la regola ai soli file .html reindirizzando il tutto alla index.php
RewriteRule (.+)*.html index.php?p=$1 [QSA,L]
#Note: QSA=Query String Append;L=Last, ultima regola

Questo insieme di regole riscrive gli url che terminano con .html nella relativa forma dinamica, del tutto trasparente a chi naviga il sito, sia esso un visitatore che un motore di ricerca.

Il caso analizzato è piuttosto semplice. E’ possibile trovarsi nella condizione di dover riscrivere indirizzi destinati a più pagine dinamiche, avendo così un insieme di regole di rewrite molto più complesso.
Il sistema di riscrittura degli url va progettato parallelamente alla struttura gerarchica del sito.

Per maggiori informazioni potrete consultare la documentazione ufficiale di Apache.