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.

  • 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:

    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

  • 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.

    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:

    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:

    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

Commenti (31)

  1. Antonio scrive:

    Certo, ma non funziona.

    Sono certo del fatto che tu abbia testato le regole prima di scriverle.

    Ma non succede nulla, è come se non ci fosse.

    Per ora ho solo:

    Redirect 301 /old_dir/dir/ http: // www . sito . com/dir

    e vorrei appunto ‘sostituire’ old_dir con qualsiasi stringa (.*)

Scrivi un commento