Mod Rewrite: come creare URL user-friendly
Inserito il: 30 marzo 2009 in |
INTRODUZIONE
Il mod_rewrite è un modulo di Apache, che consente di creare indirizzi statici (URL) in base a delle semplici regole impostate all'interno di un file .htaccess.
Questa tecnica si rivela particolarmente utile ad esempio per trasformare delle url complesse e poco chiare in url semplici, leggibili e facilmente interpretabili dai motori
di ricerca, soprattutto da Google.
Il risultato è duplice:
- nel lato "pratico" otteniamo una migliore indicizzazione sui motori di ricerca
- nel lato "estetico" una miglior chiarezza nella lettura dell'indirizzo della pagina e l'eliminazione delle interminabili url dinamiche.
In pratica possiamo rendere user-friendly tutte le url delle pagine da noi utilizzate dinamicamente (semplici pagine informative, elenchi di prodotti, ecc...)
Quando richiamiamo pagine dinamiche (ad esempio in php) alle quali passiamo dei parametri utilizziamo quella che viene definita una "querystring".
Ad esempio in una url come questa:
http://yoursite.com/products/items.php?action=product1
Fare in modo che una pagina venga visualizzata come una cartella o sottocartella anzichè con una url con querystring consente ai motori di ricerca (Google in particolare)
di indicizzare meglio la nostra pagina.
Ad esempio una url che porterà ad un determinato prodotto sarà più indicizzabile ed efficace se trasformata da così:
http://yoursite.com/products/items.php?action=product1
a così:
http://yoursite.com/products/productname
Il motore di ricerca chiaramente preferirà la seconda url dove possono essere incluse parole chiave che risulteranno meglio interpretate dal suo algoritmo con il risultato
di far salire nel ranking la vostra pagina.
IN PRATICA
Il modulo mod_rewrite è attivo praticamente di default su ogni sistema Apache.
Se così non fosse è possibile attivarlo abilitando il "Rewrite Engine" di Apache
Aprire il file di configurazione di Apache (httpd.conf, si trova in /apache/conf/)
Andare nella sezione "Dynamic Shared Object (DSO) Support"
decommentare (togliere il simbolo #) da:
LoadModule rewrite_module modules/mod_rewrite.so
e più in basso togliere il commento a:
AddModule mod_rewrite.c
A questo punto occorrerà iavviare Apache per rendere effettive le modifiche.
Veniamo finalmente al dunque e vediamo come scrivere il nostro file .htaccess al fine di trasformare le nostre URL.
Innanzitutto dobbiamo crearci un file .htaccess che andrà poi salvato e caricato nella root del sito inserendo questo comando:
Avendo le seguenti Url da voler rendere più utilizzabili:
- http://yoursite.com/pages/about.html
- http://yoursite.com/products/services.php
- http://yoursite.com/products/services.php?action=product1
- http://yoursite.com/pages/contact.html
RewriteEngine on
RewriteRule ^about/$ /pages/about.html [L]
RewriteRule ^products/$ /products/items.php [L]
RewriteRule ^productname/$ /products/items.php?action=product1 [L]
RewriteRule ^contact/$ /pages/contact.html [L]
In questo mododa adesso digitando http://yoursite.com/about/ si verrà reindirizzati sulla pagina /pages/about.html, digitando http://yoursite.com/contact/ sulla pagina /pages/contact.html, ecc...
I caratteri speciali utilizzati sono:
• ^ indica l'inizio dell'URL
• $ indica la fine dell'URL
• [L] per non far testare a mod_rewrite le regole successive ed per impedire ad Apache di consumare inutilmente risorse del sistema.
alla fine serve ad indicare che le regole non sono finite per cui a capo ce ne sarà un’altra, il [L] non verrà quindi messo per l’ultima regola.
Utilizzando le regular expressions, è possibile reindirizzare anche url più complesse.
Ad esempio far si che la url di un mio particolare prodotto diventi così:
http://www.ilmionegoziodiscarpe.com/articoli/running
avendo come url di partenza una cosa come questa qui sotto:
http://www.ilmionegoziodiscarpe.com/articoli.php?nomeprodotto=running
volendo allo stesso tempo scrivere una regola che valga sempre per ogni tipo di prodotto potrò scrivere la seguente regola:
RewriteRule ^articoli/([A-Za-z0-9-]+)$ articoli.php?nomeprodotto=$1 [L]
In pratica Apache sostituirà il valore $1 con la parte contenuta tra le parentesi tonde che in questo particolare caso indica una qualsiasi combinazione di numeri e lettere.
CONCLUSIONI E LINK
Abbiamo analizzato solo una parte di quello che si può fare con il modulo mod_rewrite di Apache.
Una volta capito il funzionamento lo si può applicare anche ad url più articolate e non solo.
Link utili per approfondire l'argomento:
Rewrite Flags
Cheat sheet
Tools utili:
Per chi non volesse scrivere totalmente in modo manuale il file .htaccess, questo pratico editor online: