URL rewrite e .htaccess: nozioni ed esempi

Postato da regole-seo, in Approfondimenti SEO, in data 26/07/2010

Conoscere e mettere in pratica l’url rewrite. [Parte 2 di 2]

Vai alla prima parte » Url rewrite

mod_rewrite

Nello scorso articolo abbiamo visto cosa è l’url rewrite e le differenze tra url rewrite e redirect 301 per capire in quali casi conviene usare uno o l’altro, visto che spesso c’è chi li confonde.

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 qualsiasi tipo (o quasi) di manipolazione degli indirizzi. Questo in molti casi implica uno sforzo non indifferente da parte di chi dovrà scrivere le regole di rewrite, spesso molto complicate.

Nello scrivere queste regole è sempre importante essere certi della loro correttezza, poiché un cattivo uso potrebbe causare dei problemi al funzionamento dell’applicazione e al server che la ospita.

Prima di vedere alcuni esempi di regole da inserire nel file .htaccess occorre sapere cosa sono le Rewrite Conditions e le Rewrite Rules.

Rewrite Conditions

Realizzata dalla direttiva RewriteCond definisce una regola condizionale.
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 sono verificate.

Come vedremo negli esempi è possibile appendere a ogni RewriteCond i seguenti flag, separati da una virgola in caso siano più di uno:

  • [NC] fa si che il pattern della RewriteCond sia valutato in modalità case insensitive
  • [OR] utilizzato per valutare in OR logico due RewriteCond consecutive.

Rewrite Rules

Realizzata tramite la direttiva RewriteRule, si occupa di definire il rewrite effettivo.

Si compone di 4 parti:
rewriterule

Anche in questo caso dunque è possibile appendere i seguenti flag separati eventualmente da una virgola:

  • [R] redirige la url invocata ad un indirizzo esterno al nostro dominio inviando un response code 302 (MOVED TEMPORARILY).
  • [F] proibisce l’accesso alla url invocata restituendo un response code 403 (FORBIDDEN).
  • [G] definisce la url invocata come non più presente restituendo un response code 410 (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.

Espressioni regolari

Per comprendere il funzionamento dei pattern usati nelle nostre regole per identificare le url occorre conoscere la sintassi delle espressioni regolari.
Qui di seguito mi limiterò ad elencare solo alcuni punti chiave per la comprensione delle espressioni regolari usate negli esempi.
Esiste molto materiale sul web realivo alle espressioni regolari e a questo sito
http://www.devarticles.com/c/a/ASP/The-Complete-Regular-Expression-Guide/
potete trovare una guida che può essere un buon punto di partenza.

  • Identificatori di testo:
    . qualsiasi carattere
    [abc] a, b oppure c
    [^abc]a, né bc
    abc|def abc oppure def
  • Quantificatori:
    ? 0 o 1 occorrenze dell’identificatore di testo precedente
    * 0 o N occorrenze dell’identificatore di testo precedente (N>0)
    + 1 o N occorrenze dell’identificatore di testo precedente (N>1)
  • Raggruppamento:
    (identificatori di testo) le parentesi tonde sono un modo per identificare un gruppo di identificatori di testo come una singola unità atomica.
  • Ancore:
    ^ inizio linea
    $ fine linea
  • Escape:
    \ esegue l’escape del carattere che segue
  • Negazione:
    è possibile eseguire la “negazione” di un determinato pattern facendolo precedere dal carattere punto esclamativo !

Non resta che vedere qualche esempio delle regole di rewrite da inserire nel file .htaccess situato nella root del nostro sito per andare incontro ad alcune classiche esigenze.

Esempi di regole di rewrite per esigenze classiche

Va detto che perché le regole di rewrite funzionino il modulo mod_rewrite di Apache deve essere abilitato all’interno del file httpd.conf della configurazione di Apache. A questo indirizzo
http://www.mrwebmaster.it/apache/articoli/guida-pratica-modulo-rewrite-apache_819.html
potete trovare un’ottima guida su come abilitare il mod_rewrite di Apache.

NOTA: per ragioni di spazio alcune linee di codice molto lunghe che definiscono le regole vanno inevitabilemnte a capo. Per questo motivo accanto ad ogni riga effettiva ho inserito il numero di riga (Es: 1-)

  • Realizzare url più brevi e SEO-friendly
    Spesso per vincoli implementativi dipendenti anche dalle tecnologie utilizzate ci troviamo di fronte ad url troppo lunghe e poco seo-friendly. E’ allora opportuno (prima della messa on-line per evitare problemi di duplicazione dei contenuti) adottare opportune regole come la seguente:

    1- RewriteEngine On
    2- RewriteRule /prodotti/([a-z]+)/([0-9]+).html http://www.MioDominio.com/
       gestione_prodotti/prodotti.action?categoria=$1&idProdotto=$2 [L]


    Questo ci permette di ottenere una url più breve e amichevole sia per gli utenti che per i motori di ricerca.
    Da notare alcune cose:
    Innanzitutto non bisogna appendere alla prima parte dell’istruzione il nome del dominio (http://www. MioDominio.com). Infatti occorre inserire l’indirizzo a partire dalla root del sito (/).
    Ricordo inoltre che nel caso di nomi di file contenenti degli spazi (cosa sempre altamente sconsigliata:)) occorre utilizzare i doppi apici per definire l’indirizzo.

    Le espressioni ([a-z]+) e ([0-9]+) indicano una porzione variabile della url che può contenere una qualsiasi serie di lettere nel primo caso e una qualsiasi serie di numeri nel secondo. Queste variabili verranno usate per realizzare la rewrite.
    Infatti il simbolo $ seguito da un numero ($1 e $2 nel nostro caso) utilizzato nella parte destra della nostra regola serve per richiamare (posizionalmente) tali variabili presenti nella parte di sinistra.

    Dunque avremmo che la url SEO-friendly da esporre sarà ad esempio http://www.MioDominio.com/prodotti/casa/150.html e grazie alla rewrite rule genererà in realtà il contenuto della url http://www.MioDominio.com/gestione_prodotti/prodotti.action?categoria=casa&idProdotto=150

  • Proteggere file e immagini
    Talvolta alcuni webmaster espongono il link diretto al download di un file situato sul nostro sito o ad un’immagine presente su una nostra pagina web.
    Con le seguenti regole la richiesta viene rediretta a http://www.MioDominio.com/ se la chiamata non proviene da http://MioDominio.com, http://www.MioDominio.com o http://62.149.140.159

    1- RewriteEngine On
    2- RewriteCond %{HTTP_REFERER} !^$ [NC]
    3- RewriteCond %{HTTP_REFERER} !^http://MioDominio.com [NC]
    4- RewriteCond %{HTTP_REFERER} !^http://www.MioDominio.com [NC]
    5- RewriteCond %{HTTP_REFERER} !^http://62.149.140.159 [NC]
    6- RewriteRule ^.*$ http://www.MioDominio.com/ [R,L]

  • Domini differenti per lo stesso sito
    In alcuni casi lo stesso sito deve essere accessibile da url differenti come ad esempio MioDominio.com e www.MioDominio.com.
    Con la seguente regola di rewrite una url come http://MioDominio.com/about.html si risolverà come un’effettiva chiamata alla url http://www.MioDominio.com/about.html.

    1- RewriteEngine On
    2- RewriteCond %{HTTP_HOST} !^MioDominio.com$ [NC]
    3- RewriteRule ^(.*)$ http://www.MioDominio.com/$1 [R,L]


    NOTA: nel caso di più domini che corrispondano allo stesso sito tenete sempre ben presente gli eventuali problemi di duplicazione dei contenuti.

  • Rewrite del dominio su una directory
    Se si ha la necessità di fare rispondere una specifica directory all’invocazione del dominio è possibile usare la seguente regola:

    1- RewriteEngine On
    2- RewriteCond %{HTTP_HOST} ^www.MioDominio.com$
    3- RewriteCond %{REQUEST_URI} !^/miaDirectory/
    4- RewriteRule ^(.*)$ /miaDirectory/$1


    In tal caso l’invocazione del dominio http://www.MioDominio.com si risolve in una chiamata alla url http://www.MioDominio.com/miaDirectory/

  • Visualizzare i contenuti opportuni in base allo user agent
    Se doveste avere la necessità di mostrare dei contenuti sulla base dello user agent dell’utente potete servirvi di una regola di rewrite simile alla seguente:

    1-  # MS Internet Explorer - Mozilla v4
    2-  RewriteEngine On
    3-  RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4(.*)MSIE
    4-  RewriteRule ^index\.html$ /index.IE.html [L]
    5-  
    6-  # Netscape v6.+ - Mozilla v5
    7-  RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5(.*)Gecko
    8-  RewriteRule ^index\.html$ /index.NS5.html [L]
    9-  
    10- # All other browsers
    11- RewriteRule ^index\.html$ /index.default.html [L]


    In questo caso, invocando la url http://www.MioDominio.com/index.html, se il campo User-Agent dell’ http header della richiesta inizia con “Mozilla/4″ e si tratta di Internet Explorer (MSIE), allora sarà eseguita una rewrite sulla pagina http://www.MioDominio.com/index.IE.html (e non verranno considerate le regole successive).
    Se invece il campo User-Agent inizia con Mozilla/5 e si tratta di Netscape (Gecko), sarà eseguita la rewrite su http://www.MioDominio.com/index.NS5.html
    Infine, per tutti gli altri browser verrà eseguita la rewrite alla url http://www.MioDominio.com/index.default.html

Per concludere ecco il link alla documentazione del modulo mod_rewrite di Apache.

Vai alla prima parte » Url rewrite

URL rewrite

Postato da regole-seo, in Approfondimenti SEO, in data 12/07/2010

Conoscere e mettere in pratica l’url rewrite. [Parte 1 di 2]

Vai alla seconda parte » URL rewrite e .htaccess: nozioni ed esempi

rewrite-url

Questo articolo, dedicato all’url rewrite, è rivolto soprattutto a coloro che hanno una gran confusione in testa dovuta al fatto che spesso anche chi ha una certa competenza in materia usa indistintamente il termine rewrite e redirect.
In realtà sono due cose ben distinte, con scopi diversi e che permettono quindi di andare incontro a esigenze diverse anche in ambito SEO.

E’ del tutto normale che, proprio a causa di questa leggerezza nell’uso dei due termini, ci siano clienti che richiedono un redirect 301 quando in realtà necessitano di un url rewrite o viceversa.
E forse è anche normale che uno sfortunato cliente che si trovi a interagire con un consulente di profilo junior, richiedendo un url rewrite per andare incontro alle proprie esigenze SEO, si ritrovi appunto implementata un url rewrite (come da lui richiesto) quando in realtà ciò che avrebbe dovuto essere realizzato era un redirect 301 .

Dividerò l’articolo in due parti. In questa prima parte vedremo cosa è l’url rewrite, quali sono le differenze tra url rewrite e redirect 301 e quando conviene usare uno o l’altro.
Nel prossimo articolo vedremo invece come realizzare l’url rewrite tramite il modulo mod_rewrite di Apache e un po’ di esempi per andare incontro ad alcune delle problematiche più comuni che richiedono l’utilizzo di url rewrite.

Che cos’ è l’url rewrite?

Effettuare un url rewrite significa fare in modo che quando il server riceve una richiesta http per una determinata url, tale richiesta viene “convertita” in una richiesta ad una url differente che sarà quella che effettivamente genererà il contenuto della pagina web.
Esiste dunque un mapping tra una determinata url richiesta (originaria) e un’altra che sarà quella effettiva che genererà il contenuto.
Il tutto 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.
A chi si occupa di SEO a questo punto dovrebbe suonare il campanello d’allarme relativo ai contenuti duplicati.

Come vedremo tra poco esistono comunque situazioni in cui ha decisamente più senso l’utilizzo dell’url rewrite anziche del redirect 301.

Differenza tra url rewrite e redirect 301

Dopo quanto detto relativamente all’url rewrite e dopo aver letto questo articolo http://www.regole-seo.com/redirect-301-pagerank dedicato al redirect 301 ci accorgiamo che in effetti sono due cose ben diverse.

Che cosa avviene con un url rewrite:

  • 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

Il client dunque è ignaro dell’esistenza della url B. L’utente o lo spider di un motore di ricerca invocano la url A e ricevono i contenuti di una url differente (B) mai invocata.
L’utente nella sua barra degli indirizzi vedrà sempre la url A.

Che cosa avviene con un redirect 301:

  • CLIENT – Richiesta url A
  • SERVER – Ricezione richiesta url A
  • SERVER – Invia al CLIENT un response code 301 indicando che la url A è stata permanentemente spostata alla url B
  • CLINET – ricezione del response code 301 e invio richiesta per la url B
  • SERVER – Ricezione richiesta url B
  • SERVER – invio dei contenuti generati dalla url B al CLIENT
  • CLIENT – Ricezione dei contenuti generati dalla url B

In questo caso il client è consapevole dell’esistenza delle due url A e B ed effettua effettivamente due richieste al server.
L’utente nella sua barra degli indirizzi vedrà comparire la url B.

Url rewrite o redirect 301? Che cosa conviene usare?

Vista la differenza di funzionamento, ragionando un poco diventa facile capire in quale caso sia più opportuno usare una tecnica piuttosto dell’altra.
Utilizzeremo due esempi che dovrebbero illustrare in maniera piuttosto completa le problematiche e i vantaggi relativi alle due soluzioni.

Per quanto riguarda le necessità SEO, possiamo dire che se il vostro sito è on-line e decidete di modificare delle url per renderle più seo-friendly allora quello che dovete fare è utilizzare dei redirect 301 per almeno due buoni motivi:

  • Evitate i problemi di contenuti duplicati. Infatti con l’url rewrite avreste due indirizzi in grado di generare lo stesso contenuto: la url nuova (seo friendly) e quella vecchia che probabilmente è già presente nei link di altri siti e nelle SERP dei motori di ricerca.
  • Nessuna perdita di PageRank (come descritto in questo articolo http://www.regole-seo.com/redirect-301-pagerank). Tramite url rewrite il valore di PageRank guadagnato dalla vecchia url non verrebbe trasferito alla nuova url.

Supponete invece che il vostro sito abbia una nuova sezione, diciamo relativa ad un concorso, in comune con altri siti e situata dunque su un suo dominio differente.
L’utente potrebbe essere spaesato nel cliccare il link del concorso sul vostro sito e ritrovarsi su un dominio diverso.
Anche da un punto di vista marketing potreste avere qualche problema visto che chi ha pagato per avere dei banner sul dominio del vostro sito se li ritroverebbe invece su un dominio sconosciuto.
Ecco che in questo caso ci viene in aiuto l’url rewrite:
nel nostro sito pubblicheremo il link al concorso con una url fittizia “www.mioDominio.com/concorso” (relativa al nostro dominio e seo-friendly) e imposteremmo una regola di mapping tra quest’ultima e l’effettiva url “www.amministrazione-concorsi/concorso” facendo felici utenti e marketing.
Infatti al click sul link del concorso “www.mioDominio.com/concorso” il server risponderà con i contenuti di “www.amministrazione-concorsi/concorso” ma l’utente continuerà a vedere nella barra degli indirizzi “www.mioDominio.com/concorso”.

Chiaramente poiché la url reale non verrà mai esposta sul web non dovrebbe mai entrare negli indici dei motori di ricerca o nei link di siti esterni e quindi anche in termini di duplicazione di contenuti non si corre alcun rischio.

Vai alla seconda parte » URL rewrite e .htaccess: nozioni ed esempi

Page optimized by WP Minify WordPress Plugin