Sviluppo siti internet con mod_rewrite di Apache (parte 1 – siti monolingua)
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)
- 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…
- Utilizzare per le pagine titoli che siano brevi e rappresentanti il reale contenuto della pagina web
- 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
- Inserire sempre in tutte le pagine keywords e description, anche se contano sempre meno male non fanno. Se possibile personalizzarle per pagina
- Scegliere un nome di dominio possibilmente coerente con il tipo di attività o prodotto da promuovere
- 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)
- 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
- 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…
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
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/
Grazie per i complimenti.
A presto,
Ciao. Max
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
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
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.
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
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
Grazie Lore,
registrati e scrivi qualche articoletto.
Ciao. Max
What is bumburbia?
MAC RULEZ OVERALL