Mostrare i get dei link come cartelle – L’uso di htaccess nel sito: cos’è e come funziona – parte 02

Nell’articolo precedente abbiamo visto cos’è l’.htaccess e il suo funzionamento di base.
Adesso ci occuperemo di scendere nei dettagli e di mostrare le direttive più complesse, per gestire ogni situazione possibile.
Al termine dell’articolo sarete in grado di agire tanto sui link con valori statici quanto su quelli con valori dinamici, e di personalizzare eventuali pagine di errore.

L’uso delle regole: ignorare alcune cartelle e gestire i link con i get

Entriamo nel cuore dell’.htaccess. Sotto al codice che abbiamo visto prima, possiamo stabilire delle regole precise. Innanzitutto, dobbiamo specificare quali delle cartelle non saranno coinvolte dalle direttive: questo ci sarà utile, per esempio, per le cartelle contenenti le immagini o i javascript.

1
2
3
4
#Cartelle da ignorare
RewriteCond %{REQUEST_URI} img/ [OR]
RewriteCond %{REQUEST_URI} js/
RewriteRule ^(.*) $1 [L]

Il RewriteCond corrisponde alla condizione if dei linguaggi di programmazione: se quello che c’è scritto si verifica, allora si applicherà la regola del RewriteRule.
In pratica abbiamo stabilito che gli indirizzi che fanno riferimento alle cartelle “img” e “js” rimarranno come sono e non saranno modificati. L’attributo [L] specifica che, nel caso sia trovato uno dei due indirizzi, la parte sotto che andremo a comporre con altre direttive non sarà letta.

Adesso vediamo come trasformare un link pieno di valori get nella forma voluta:

1
2
#Esempio di trasformazione di un link con valori statici
RewriteRule ^prodotti/ categoria.php?prod=divano&cat=promozioni [L]

In questo caso la direttiva è semplice: quando l’indirizzo base sarà esattamente nella forma “www.sito.it/categoria.php?prod=divano&cat=promozioni” gli utenti lo vedranno nel loro browser nella forma “www.sito.it/prodotti/”.
Si tratta, in parole povere, di un sostituto. I due get originali (“prod” e “cat”) sono ancora esistenti, ma per gli utenti non saranno visibili. Se per qualche motivo doveste fare dei controlli sul valore di “prod”, vi basta fare come al solito:

1
2
3
if($_GET['prod']=="divano"){
	//azioni varie
}

Una nota importante: la priorità. L’.htaccess legge le direttive in ordine così come gli sono presentate. Questo significa che la prima direttiva trovata ha la priorità. Per esempio:

1
2
3
#Ordine di lettura delle direttive
RewriteRule ^prodotti/ categoria.php?prod=divano&cat=promozioni [L]
RewriteRule ^categorie/ categoria.php?prod=divano&cat=promozioni&pag=1 [L]

Se noi gli andiamo a passare questo link
http://www.sito.it/categoria.php?prod=divano&cat=promozioni&pag=1
l’utente vedrà scritto sul suo browser “http://www.sito.it/prodotti/” e non “http://www.sito.it/categorie/” come ci si potrebbe aspettare. Perché? La seconda direttiva non è altro che la prima con l’aggiunta di un altro valore get (“pag”): l’.htaccess vede che, effettivamente, la prima regola coinvolge il nostro link, indipendentemente dai valori che ci sono dopo, e quindi esegue la direttiva; il fatto che ci sia il parametro [L] significa che, a quel punto, smette di leggere le direttive successive: per cui non vedrà mai la seconda direttiva.
Se il parametro [L] non ci fosse stato, però, l’.htaccess avrebbe invece proseguito e avrebbe incontrato la seconda direttiva, che sarebbe andata a sovrascrivere la prima.

Gestire i link con valori dinamici e l’uso delle espressioni regolari

Facciamo un passo avanti. Vediamo il caso in cui i valori nei link siano creati dinamicamente attraverso delle variabili php. Per esempio:

1
2
3
$prod="divano";
$tipo="promozioni";
$link="http://www.sito.it/categoria.php?prod=$prod&cat=$tipo";

Noi abbiamo stabilito manualmente il valore delle variabili $prod e $tipo, ma cosa succederebbe se non fossero stabilite a priori, a esempio perché estratte dal database? Come è possibile far leggere all’.htaccess dei valori dinamici?

Per agire correttamente, dovremmo far uso delle espressioni regolari. E’ la parte del tutorial più complessa da capire e che può portare il maggior numero di errori, ma ci permette di gestire qualsiasi tipo di stringa.

1
2
#Regola per gestire link con valori dinamici
RewriteRule ^([a-z0-9\-]{3,50})/(.*)/ categoria.php?prod=$1&cat=$2 [L]

L’.htaccess leggerà le variabili $1 e $2 e le trasformerà nella forma stabilita a inizio regola, nello stesso ordine con cui sono state lette.
Nel nostro esempio, l’utente vedrà il link nella forma:
http://www.sito.it/divano/promozioni/

Diamo un’occhiata alle espressioni regolari che abbiamo usato per “convertire” le variabili $1 e $2 nella forma voluta:
([a-z0-9\-]{3,50}) indica che la variabile passata è valida nel caso in cui sia composta da valori alfanumerici e abbia una lunghezza compresa tra 3 e 50
(.*) indica che qualsiasi valore passato sarà valido, quindi non verrà fatto nessun controllo sulla stringa della variabile $2

Nel caso in cui anche una sola delle due espressioni regolari non sia verificata, la regola non è valida e il link non viene convertito.

Potete capire come anche i link più complessi, con una certa esperienza, possano assumere la forma voluta. L’importante è conoscere a fondo le espressione regolari.

Personalizzare le pagine di errore

1
2
3
#Personalizzazione della pagina di errore
ErrorDocument 404 /errore.php
ErrorDocument 403 "Impossibile accedere"

La regola specifica che in caso di errore 404 (pagina non trovata) verrà caricata la pagina errore.php, mente in caso di errore 403 l’utente si vedrà apparire sullo schermo la scritta “Impossibile accedere”.

Etichette
Etichette:,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.