Gen 08 2006

Sviluppo siti internet con mod_rewrite di Apache (parte 1 - siti monolingua)

Published by maxgrante at 03:00 under Apache, Webserver, PHP il turbo nel web

Buongiorno a tutti,
scrivo questo articolo per cercare di spiegare in modo semplice, pratico e diretto come sviluppare siti web dinamici ottimizzati per i motori di ricerca, Google su tutti.
Nello specifico mi avvarrà dell’utilizzo del comodissimo mod_rewrite di apache, l’intero articolo è incentrato particolarmente su di esso.

L’articolo sarà  diviso in 2/3 parti:

  • Sviluppo siti internet “monolingua” con mod_rewrite di apache
  • Sviluppo siti internet “multilingua” + approfondimenti sistemistici
  • Eventuale terzo articolo con approfondimenti dettati da vostre richieste e suggerimenti

PREMESSA (REGOLE PER UNA VALIDA INDICIZZAZIONE NEI MOTORI DI RICERCA)

  1. Evitare la porcata di mettere parole chiave nascoste (non mi riferisco al solito meta tag) a raffica all’interno delle pagine del sito, se i motori se ne accorgono sono dolori… anzi, cazzi…
  2. Utilizzare per le pagine titoli che siano brevi e rappresentanti il reale contenuto della pagina web
  3. Utilizzare nomi di pagine che non siano: pagina1-int.php o cose simili, se sto realizzando una pagina che visualizza notebook la chiamerà notebook.php o simili
  4. Inserire sempre in tutte le pagine keywords e description, anche se contano sempre meno male non fanno. Se possibile personalizzarle per pagina
  5. Scegliere un nome di dominio possibilmente coerente con il tipo di attività  o prodotto da promuovere
  6. Scrivere codice compatibile con gli standard dettati dal W3C (quelli che tanto per intenderci alla Microsoft non sanno cosa sono…), personalmente consiglio XHTML 1.0 transitional che non stressa più di tanto ed è efficace (sono benvenuti suggetimenti differenti)
  7. Evitare sgami strani del tipo, quando passa Google gli faccio vedere qualcosa d’altro, se si accorgono che cià che il motore indicizza non è lo stesso di quello che visualizzerebbe un utente normale si incazzano e fanno bene
  8. Utilizzare tag come h1, h2 facilita il bot nel comprendere che quel testo è un titolo o un sottotitolo, per il corpo utilizzare ad esempio il tag html p

UTILIZZO DI MOD_REWRITE PER OTTENERE URL “PIACEVOLI” PER I MOTORI DI RICERCA

Veniamo ora al reale motivo per cui scrivo questo articolo.
Realizzare un sito dinamico è indubbiamente una cosa eccezionale per un cliente e per chi lo realizza, poter utilizzare un’unica pagina product.php?id=x è molto meglio di avere 800.000 pagine per ogni maledetto prodotto, idem per le news etc…
Purtroppo perà questi URL cosiddetti dinamici sono poco graditi ai motori di ricerca, Google su tutti, sia perchè la pagina esprime solo il concetto che tratta un prodotto, sia perchè proprio questo ?id=x non è amato da Google. Non parliamo poi di cose come ?id?x&a=2&b=y …

A salvarci da questo annoso problema viene incontro mod_rewrite di apache.
In pratica è possibile far puntare le nostre pagine a qualcosa di questo tipo: http://www.miosito.com/product/albero_motore_nave-10.html

Chiaramente questa risorsa non esiste sul nostro web server indiano preferito ma dovremo fare in modo che quando il browser dell’utente punta all’indirizzo sopra citato la pagina chiamata internamente da apache sia qualcosa tipo: product.php?id=x (il tutto trasparentemente per Google e per l’utente).

Per fare cià usiamo mod_rewrite e le direttive da lui fornite. Vediamo un esempio di direttiva che soddisfi il nostro caso:

RewriteEngine On
RewriteRule ^product/([^/]+).html product.php?id=$1 [L]

In sostanza con RewriteEngine On si dice al motore di avviarsi, con la seconda direttiva si comunica ad apache che per la risorsa /product deve prendere come variabile tutto cià che precede .html e utilizzarla come variabile $1 che poi verrà  comodamente passata in GET alla pagina php.

Chiaramente nello script dovremo parsare $_GET['id'] e “prelevare” il valore reale che ci interessa di quanto in input, ovvero 10.
E’ assolutamente possibile far fare questo parsing già  ad apache ma siccome non mi ricordo a memoria come si fa e sono le 3 di notte mi scuso e se lo scoprite segnalatemelo… :-D

E’ probabile che in realtà  il prodotto sia memorizzato nel DB con il nome di “Albero motore nave”, ovviamente prima di passarlo in GET è il caso di ripulirlo dei caratteri non prettamente alfanumerici e renderlo strtolower.

E’ assolutamente essenziale anche che tutto quanto presente e referenziato in product.php abbia come riferimento o il path assoluto alla risorsa o alla root del sito.

A seguire tra qualche giorno le restanti parti dell’articolo.

Tanti saluti e buon rewrite a tutti.
Max - info [AT] massimo-caselli [DOT] com

12 Responses to “Sviluppo siti internet con mod_rewrite di Apache (parte 1 - siti monolingua)”

  1. Matteo G.P. Floraon 08 Gen 2006 at 17:08

    Ecco un bell’articoletto per rinpinguare le pagine del Blog!
    Brevo Massimo, vai così e rimaniamo in attesa delle parti seguenti…
    Shameless Se.f Promotion Mode On: In casa Microsoft lo stesso meccanismo è implementabile in .NET tramite Url Rewrite… Se vi interessa date un occhio qui: http://www.lastknight.com/articoli/dotnet-url-rewriting-and-caching-engine/

  2. maxgranteon 08 Gen 2006 at 18:30

    Grazie per i complimenti.

    A presto,
    Ciao. Max

  3. Siggyon 08 Gen 2006 at 23:03

    Ciao,
    per risolvere il problema del parsing basta utilizzare una cosa del genere del file .htaccess:

    RewriteRule ^product/([a-zA-Z]+)_([a-zA-Z]+)_([a-zA-Z]+)-([0-9]+).html$ /product.php?id=$4

    In questo modo passi allo script la variabile 4 che contiene direttamente l’id del prodotto.

    Era questo che intendevi?

    ciao

  4. maxgranteon 09 Gen 2006 at 00:03

    Ciao Siggy!
    si esatto grazie mille, comunque per come intendevo io l’eventuale nome del prodotto basterebbe a questo punto:
    RewriteRule ^product/([a-zA-Z]+)-([0-9]+).html$ /product.php?id=$2

    Questo perchè assumevo il fatto che il nome prodotto non fosse separato in tre mini stringhe ma una sola dove gli spazi sono sostituiti con _
    Con la tua regola sarei costretto ad avere nomi di prodotto composti sempre da stringa1_stringa2_stringa3-ID.html
    Invece con la modifica che ho fatto puoi passare cià che vuoi come nome prodotto purchè appendendo -ID.html

    Comunque il concetto è assolutamente perfetto.

    Grazie mille e ciao. Max

  5. riffraffon 09 Gen 2006 at 01:51

    interessante, ma attendo con ansia il secondo perchà© queste cose già  più o meno le sapevo :)
    Comunqeu, forse intereessa, quasi tutti i framework web di ultima generazione come nevow,rails e django forniscono la possibilità  di effettuare mapping da pretty url a parametri automaticamente anche senza mod_rewrite.

  6. maxgranteon 09 Gen 2006 at 04:16

    Ciao Riffraff,
    il secondo non sarà  nulla di trascendentale perà cercherà di farlo non alle 3 di notte e approfondire le parti sistemistiche nonchè il discorso per il multilingua.

    Hai ragione, questo stesso sistema, Wordpress con cui è fatto questo blog utilizza mod_rewrite in modo particolare, in pratica gestiscono sempre con mod_rewrite alcune cose ma il grosso del lavoro è fatto da php.

    Magari ne parlo proprio nell’articolo.

    Grazie e ciao. Max

  7. [...] sicurezza e gentoo http://topolinux.altervista.org/forum/viewforum.php?f=16 linux php mysql blog http://www.massimo-caselli.com/2006/01/08/mod_rewrite-apache-sviluppo-siti-internet/ [...]

  8. [...] Ciao a tutti, a seguito dell’articolo http://www.massimo-caselli.com/2006/01/08/mod_rewrite-apache-sviluppo-siti-internet/ cerchiamo di trovare una buona soluzione per non diventare matti nella realizzazione di un sito web multilingua e che sia ottimizzato per una buona indicizzazione su Google. [...]

  9. Loreon 01 Mar 2006 at 23:55

    Ciao Max,
    volevo solo farti i complimenti per l’articolo che hai scritto e per il blog che hai messo in piedi…
    Pensare che quest’articolo è del 8gennaio e solo oggi vengo a scoprire che hai un blog…va bhe…

    ciao
    Lore

  10. maxgranteon 02 Mar 2006 at 08:17

    Grazie Lore,
    registrati e scrivi qualche articoletto.

    Ciao. Max

  11. [...] http://www.massimo-caselli.com/2006/01/08/mod_rewrite-apache-sviluppo-siti-internet/ [...]

  12. Hoalcoarkon 07 Gen 2009 at 12:19

    What is bumburbia?

Trackback URI | Comments RSS

Leave a Reply