L’url rewrite è una tecnica che permette al server di convertire una determinata url in una nuova richiesta con un url differente che sarà quella che genera il contenuto della pagina web. Per fare ciò, è necessario che si crei un mapping tra una determinata url richiesta (originaria) e un’altra.
Questo tipo di conversione avviene lato server e il browser dell’utente non si accorge di nulla . La url che l’utente continuerà a vedere nella barra degli indirizzi sarà quella originaria. Discorso analogo per gli spider dei motori di ricerca.
Questo significa anche che realizzando una url “A” SEO-friendly mappata su una url “B” che è l’effettiva url che genererà la pagina web, avremo due url che se invocate dal browser genereranno lo stesso contenuto.
Ma vediamo in pratica cosa accade con questo schema:
CLIENT – Richiesta url A
SERVER – Ricezione richiesta url A
SERVER – Rewrite della url A con la url B
SERVER – invio dei contenuti generati dalla url B al CLIENT
CLIENT – Ricezione dei contenuti generati dalla url B
Ipotizziamo che l’url che genera i contenuti (B) sia del tipo:
https://www.mio_sito.it/prodotti.php?categoria=telecamere&idProdotto=115.
Come molti che hanno a che fare con le problematiche SEO sanno, questa url viene mal digerita dagli spider dei motori di ricerca e questo comporterebbe una mancata visibilità dei contenuti del nostro sito. Per evitare questo inconveniente si dovrebbe sostituire la url B con una scritta un questo modo:
https://www.mio_sito.it/prodotti/telecamere/115 (url A).
Quello che avviene tramite l’url rewrite è proprio questa conversione che ci permetterà di mostrare url SEO-friendly.
Non ci resta che vedere come si realizza l’url rewrite, tramite modulo mod_rewrite di Apache e un po’ di esempi su come utilizzarlo per risolvere alcuni tra i problemi più classici. Il modulo mod_rewrite di Apache è un modulo che fornisce un potente mezzo per la manipolazione delle url. Tramite il mod_rewrite è possibile ottenere quasi ogni tipo di manipolazione degli indirizzi. Scrivere le regole di rewrite, richiede uno sforzo non indifferente e spesso sono molto complicate.
Le conseguenze di un cattivo uso di queste regole si ripercuoterebbe sull’applicazione e sul server che la ospita è quindi necessario prestare la massima attenzione. Le regole di riscrittura sono inserite nel file .htaccess e si dividono in due tipi :
Rewrite Conditions e
Rewrite Rules.
Vediamo in dettaglio entrambi i tipi.
Rewrite Conditions
La direttiva RewriteCond definisce una regola condizionale e la RewriteRule che segue una o più RewriteCond viene applicata solo se la url richiesta al server corrisponde al pattern della RewriteRule stessa e se tutte le RewriteCond precedenti siano verificate.
Come vedremo negli esempi è possibile aggiungere a ogni RewriteCond dei flag, separati da una virgola in caso siano più di uno:
- [NC] Questo rende la condizione della RewriteCond case insensitive, nessuna differenza tra ‘AZ’ e ‘a-z’.
- [OR] Questo permette di valutare in OR logico due RewriteCond consecutive.
La direttiva RewriteRule, si occupa dell’effettivo rewrite dell’indirizzo. Esso di compone di 4 parti come da figura
Anche le RewriteRule hanno delle opzioni che possono essere aggiunte alle precedenti separandole con una virgola:ù
- [R] restituisce un codice 302 e rimanda a un indirizzo esterno la richiesta (MOVED TEMPORARILY).
- [F] restituisce un codice 403 proibendo l’accesso alla url invocata (FORBIDDEN).
- [G] restituisce un codice 410, la url invocata come non più presente (GONE).
- [L] forza il processo di rewrite a fermarsi e a non considerare le regole di rewrite successive.
- [P] identifica la url come una richiesta al proxy passando il controllo al modulo mod_proxy.
Per comprendere il funzionamento dei pattern usati nelle nostre regole per identificare le url occorre conoscere la sintassi delle espressioni regolari ma questo argomento non sarà trattato in questo articolo. Passiamo a presentare qualche esempio pratico per concludere e chiarire quando detto fino ad ora.
Consideriamo il caso in cui a causa di vincoli di sviluppo o per ragioni varie, le nostre url siano troppo lunghe. Nel caso in cui si volessero creare delle URL SEO-friendly, prima di mettere on-line il nostro sito (onde evitare la duplicazione dei contenuti), si dovrebbero adottare delle regole come le seguenti:
RewriteEngine On
RewriteRule /prodotti/([a-z]+)/([0-9]+).html https://www.mio_sito.it/elenco-prodotti/prodotti.php?categoria=$1&idProdotto=$2 [L]
Grazie a queste poche righe (che ricordo devono essere inserite nel file .htaccess) possiamo ottenere le nostra agogniate url brevi e “amichevoli” per i motori di ricerca. Notiamo subito che dopo la direttiva RewriteRule scriviamo il pattern senza inserire il dominio e il protocollo (https://www.mio_sito.it) ma solo quello che c’è nella root del sito ovvero dopo il primo “/”.
Usando le espressioni regolari ([a-z]+) e ([0-9]+), facciamo in modo di prelevare una stringa di caratteri variabile nel primo caso e una stringa di numeri nel secondo caso.
Queste stringhe saranno usate per riscrivere la url che dobbiamo mandare al nostro server per ottenere i dati richiesti. Il simbolo $ seguito dei numeri 1 e 2 indicano l’ordine in cui le stringhe di caratteri e numeriche dovranno essere sostituite nella url di sinistra.
Pertanto il nostro utente finale e i motori di ricerca vedranno qualcosa del tipo
https://www.mio_sito.it/prodotti/telecamere/115.html
e grazie alla riscrittura delle url con la regola appena scritta otterremo il contenuto di questa url
https://www.mio_sito.it/elenco-prodotti/prodotti.php?categoria=telecamere&id=115 ( $1=telecamere; $2=115).
In conclusione vorrei sottolineare che affinché le regole di riscrittura abbiano effetto il modulo mod_rewrite di Apache deve essere attivato configurando il file httpd.conf