Comprendere il funzionamento della riscrittura degli URL nel file
.htaccess
è un requisito fondamentale per comprendere come gestire al meglio gli URL dei siti dinamici. Wordpress, ad esempio, gestisce i suoi URL permanenti tramite tale file e il modulo per la riscrittura degli URL di Apache. Solitamente non abbiamo bisogno di approfondire l'argomento, poichè Wordpress gestisce tutto il processo in maniera visuale e automatica nelle sue opzioni di configurazione. Tuttavia, a volte è necessario aggiungere delle regole specifiche al file .htaccess
per ottenere l'effetto finale voluto. Vediamo alcuni dettagli di questo argomento.
Abilitare il reindirizzamento degli URL
Se ci avete fatto caso, Wordpress scrive il suo file .htaccess
iniziando con la seguente regola:
RewriteEngine on
Questa regola si rende necessaria perchè alcuni server non abilitano la riscrittura degli URL in modo predefinito, quindi dobbiamo farlo manualmente.
Reindirizzamenti di base
Possiamo reindirizzare i nostri visitatori ad un nuovo URL di un documento usando la seguente sintassi:
RewriteEngine on RewriteRule ^about\.html$ me.html
Questa regola (RewriteRule
) reindirizza l'utente dal documento about.html
al documento me.html
in modo instantaneo. Possiamo forzare una nuova richiesta HTTP nel browser semplicemente usando il flag [R]
alla fine della regola:
RewriteEngine on RewriteRule ^about\.html$ me.html [R]
La struttura di questa regola è la seguente:
- il primo parametro è un'espressione regolare che serve a selezionare l'URL da riscrivere:
^about\.html$
- il secondo parametro è la forma finale dell'URL una volta riscritto:
me.html
- il terzo parametro (opzionale) serve a dare ulteriori indicazioni sull'azione di riscrittura:
[R]
Dato che il primo parametro è un'espressione regolare, caratteri come ^
, $
e .
hanno un significato particolare. Per chi è già pratico di espressioni regolari, il primo carattere seleziona l'inizio dell'URL, il secondo la sua fine e il terzo riceve un carattere di escape (\
) perchè il suo significato originale è "seleziona tutti i caratteri".
Ora che sappiamo che la riscrittura degli URL è soprattutto basata su espressioni regolari, possiamo passare ad analizzare dei reindirizzamenti più avanzati.
Reindirizzamenti avanzati
Supponiamo di avere questa struttura di URL:
http://sito.it/prodotti/1
Vogliamo riscrivere questo URL come:
http://sito.it/prodotti.php?id=1
Ecco come possiamo fare:
RewriteRule ^prodotti/([0-9])+/$ /prodotti.php?id=$1
Le espressioni regolari generano dei riferimenti che vengono elencati progressivamente con $1
, $2
e così via. Quindi in questo caso l'espressione regolare che seleziona un numero generico di cifre viene memorizzata in $1
e quindi id=$1
verrà riscritto come id=1
, id=2
e così via.
([0-9])+
significa: "seleziona solo delle cifre" o più precisamente una o più cifre (+
). Quindi l'intera espressione regolare significa: "seleziona un URL che inizia con prodotti
e termina con una o più cifre
E se volessimo fare l'opposto? Ecco come fare:
RewriteRule ^prodotti\.php\?id=([0-9])+$ /prodotti/$1
Questa regola trasforma URL come http://sito.it/prodotti.php?id=1
in http://sito.it/prodotti/1
.
Riferimenti
- Apache mod_rewrite Introduction (documentazione ufficiale di Apache)
- Apache Cookbook