L’URL rewriting con .htaccess

Spesso si impiega parecchio tempo per trovare il nome adatto per il proprio dominio; questo è un passo molto importante, il nome del dominio dovrebbe avere una caretteristica distintiva ma dovrebbe anche  essere facile da scrivere, leggere, ricordare o dire al telefono.

Il tempo speso però non si deve fermare alla sola ricerca del giusto nome a dominio, bisogna impegnare del tempo anche per il resto dell’indirizzo url, è importante anche il percorso, ciò che viene dopo il nome del dominio. Anche questo deve essere pertinente, appropriato, memorizzabile e facile da scrivere o leggere.

Tutto questo per attirare clienti e migliorare il ranking di ricerca.

Per venire incontro a queste esigenze c’è una tecnica di riscrittura degli indirizzi, chiamata URL Rewriting, che può trasformare indirizzi sgradevoli in URL “amichevoli” con parole chiave leggibili senza intaccare la struttura delle vostre pagine.

 

Argomenti

  1. Cosa è l’url rewriting
  2. Come aiuta l’url rewriting nel rating dei motori di ricerca
  3. Esempi di riscrittura degli URL con espressioni regolari e condizioni
  4. Condizioni di riscrittura
  5. Come viene usato l’url rewriting sul web (wiki e altri)
  6. Creazione di un URL “piacevole”
  7. Problemi frequenti
  8. Esempi
  9. Approfondimenti

 1) cosa è l’url rewriting

Se dovessimo scrivere una lettera d’amore sul nosto computer, probabilmente apriremmo il nostro programma per scrivere i testi e creeremmo un file chiamato ad esempio letteradamore.doc, questo file si troverebbe nella directory Documenti e il suo percorso completo sarebbe c:\Windows\users\Documenti\letteradamore.doc.
Il percorso cosi concepito è molto esplicativo, ci fa capire cos’è il file solamente leggendo l’URL.

Allo stesso modo, se vogliamo creare un sito web dovremmo cercare di mantenere un indirizzo il più possibile esplicativo, dunque andando a creare un sito possiamo organizzarlo allo stesso modo, creando delle pagine web con dei nomi e dei perscorsi esplicativi.

L’URL rewriting ci viene in aiuto quando a organizzare le nostre pagine web è un CMS o generalmente quando utilizziamo un database, in linea di massima una pagina creata con un CMS o un database risulta essere cosi www.ilmiobelnomedidominio.it/index.php?wy-12345 o in altri casi ancora peggio. La tecnica dell’ URL rewriting ci permette di gestire indipendetemente l’URL e il percorso della risorsa

2) Come funziona l’url rewriting e come ci aiuta

Riuscireste a indovinare, guardando il link, cosa vende questo sito?

www.dakotaitalia.com/catalogo/focus.php?s=2&c=94&c2=25

Se avete indovinato “grondaia marrone” non posso che non farvi i complimenti e consigliarvi di andare a giocare qualche lotteria.

Il link è risultato il 9° per la ricerca della parola “grondaia marrone” su google.it, prima di lui c’erano altri siti, alcuni anche meno importanti di quello preso in questo esempio

Url Rewriting nella ricerca

Se si scorrono i risultati sopra a dakotaitalia si vede che le parole ricercate sono evidenziate da google.

Guardando il link si può supporre che un file focus.php dentro la cartella catalog vada a prendere un prodotto identificato con s=2&c=94&c2=25 , in questo caso la risorsa è strettamente legata all’url.

Si potrebbe trasformare questo url in uno più riconoscibile del tipo www.dakotaitalia.com/catalogo/grondaia-marrone/s=2&c=94&c2=25  senza rifare tutto il sito web? Si, se si utilizza correttamente l’URL rewriting e senza che l’utente o il motore di ricerca ne venga a conoscenza.

Gli URL amichevoli e leggibili sono da sempre considerati uno dei fattori più importanti per il posizionamento.

3) Esempi di riscrittura degli URL con espressioni regolari e condizioni

La possibilità di riscrivere gli url è data dal server web, tutti i nostri hosting hanno il mod_rewrite di Apache gia installato

Per incominciare la cosa più semplice

Il caso più semplice è la riscrittura di una singola pagina statica, giusto per imparare le funzioni base dell’URL rewriting in Apache. Per fare questo è necessario modificare il file .htacces che si trova nella cartella pubblic_html

Ad esempio, se abbiamo una pagina che parla di cani con il nome di X45RyapAtua.htm possiamo aggiungere le seguenti righe al file .htaccess

RewriteEngine On
RewriteRule cani.htm X45RyapAtua.htm

Ora, andando a visitare la pagina www.ilmiobelsito.it/cani.htm ci troveremo nella pagina web X45RyapAtua.htm e il nostro browser rimarrà nella pagina cani.htm, quindi i visitatori e i motori di ricerca non sapranno mai che in origine alla pagina avevi dato un nome cosi criptico
Le espressioni regolari
Quando si effettua la riscrittura dell’URL è necessario indicare solo la corrispondenza del percorso dell’URL, escluso il nome del dominio e il primo slash(/). La regola che avevamo fatto prima indicava ad Apache che se il percorso contiene cani.htm doveva mostrare la pagina X45RyapAtua.htm. Questo potrebbe portare problemi, perchè se si visita la pagina tanticani.htm si andrebbe a vedere ugualmente la pagina precedente. Allora dovremo andare a scrivere questo

RewriteEngine On
RewriteRule ^ cani.htm $ X45RyapAtua.htm

Il ^ cani.htm $ è una espressione regolare, in cui i caratteri speciali hanno un significato in più.
Il ^ corrisponde all’inizio del percorso, e $ corisponde alla fine. Questo significa che il percorso deve iniziare e finire con cani.htm. cosi funzionerà solo cani.htm e non tanticani.htm o cani.html. Questo è molto importante per i motori di ricerca come Google, che possono penalizzare le pagine considerandole come contenuto duplicato (pagine identiche che possono essere raggiunte tramite più indirizzi)

Miglioriamo ancora
Possiamo migliorare ancora un po’  il nostro rewrite

RewriteEngine On
RewriteRule ^ cani /? X45RyapAtua.htm $ [NC]

Il simbolo ? indica che il caratte precedente è opzionale, quindi in questo caso l’url funzionerebbe con o senza / finale ( www.ilmiobelsito.it/cani uguale a www.ilmiobelsito.it/cani/ ). Questo caso non è considerato un contenuto duplicato e serve per evtare confusione se la gente ha accidentalmente inserito una barra. Il codice fra le parentesi quadre da ad Apache altre indicazioni. [NC] è un flag e significa che la regola è case insensitive (indifferenza fra maiuscole e minuscole)
Commenti e Flag
Il commento si inserisce con il carattere # . Nulla dopo questo carattere viene preso in considerazione da Apache, quindi è utile per spiegare una regola in modo che chi andrà a aprire quel file in futuro potrà capire cosa è stato fatto.
Il flag [L] significa che se la regola corrisponde non c’è bisogno che prosegua con le regole successive

4) Condizioni di riscrittura

La riscrittura può includere anche le condizioni e fare uso di variabili di ambiente. Queste due caratteristiche fanno in modo di reindirizzare semplicemente le richieste da un alias di un dominio ad un altro. Questo è particolarmente utile se un sito web cambia la sua estensione principale, ad esempio da ilmiobelsito.it a ilmiobelsito.com

Redirect del dominio

RewriteEngine On
RewriteCond % {HTTP_HOST}! ^ Www.ilmiobelsitoweb.com $ [NC]
RewriteRule (.*) http: / / www.ilmiobelsitoweb/ $ 1 [L, R = 301]

La seconda riga presenta il valore RewriteCond, che viene usato per confrontare una variabile di ambiente di Apache (in questo caso il nome dell’Host), se questa condizione è vera va alla riga successiva
Se ad esempio % {HTTP_HOST} è www.ilmiobelsitoweb.it la condizione è verificata (il ! indica non) e dunque apache può riscrivere.
Il flag [R=301] indica ad apache di fare un redirect 301 (cioè permanente) e dunque invierà il nuovo URL al browser o al motore di ricerca. A differenza degli esempi precedenti in questo caso il nuovo URL apparirà nella barra degli indirizzi

8) Esempi

Proteggere le nostre immagini e file dai download esterni.
Tutte le richieste che non provengono dal nostro sito (interne) sono redirezionate alla pagina http://www.ilmiobelsitoweb.com

RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://ilmiobelsitoweb.com [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilmiobelsitoweb.com [NC]
RewriteCond %{HTTP_REFERER} !^http://95.141.43.42 [NC]
RewriteRule ^.*$ http://www.ilmiobelsitoweb.com/ [R,L]

9) Per approfondire

http://httpd.apache.org/docs/current/mod/mod_rewrite.html (en)

http://www.generateit.net/mod-rewrite/index.php  Generatorore di regole per l’ur rewriting (en)