Uso avanzato di rewriting

La potenzialità di rewriting viene messa in evidenza quando si ha la possibilita di aggiungere, oltre all'URL matching, ulteriori condizioni per il redirect, come ad esempio la gestione di comportamenti diversi a seconda del browser utilizzato o dell'IP del client.  In questo caso la direttiva RewriteRule viene affiancata da un seconda direttiva, RewriteCond che specifica le condizioni su quando eseguire il redirect.

RewriteCond
Tramite questa direttiva si ha la possibilità di testare l'environment e gestire il redirect a seconda di determinate variabili d'ambiente. Le direttive RewriteCond devono essere specificate prima delle RewriteRule e possono essere unite fra di loro semplicemente elencandole una di seguito l'altra o tramite l'operatore logico [or].
Per esempio:
RewriteCond %{REMOTE_ADDR} ^192.168\.208\.1
RewriteCond %{REMOTE_USER}  pippo
RewriteRule ^/$ /internals/  [L]

Se l'indirizzo del client è 192.168.208.1 E l'utente remoto è pippo allora viene eseguita la regola di rewrite.

RewriteCond %{REMOTE_ADDR} ^192\.168\.208\.1 [or]
RewriteCond %{REMOTE_USER}  pippo
RewriteRule ^/$ /internals/  [L]

L'opzione [or] fa si che se una sola condizione è vera si esegue il redirect

URL-based conditions
E' possibile aggiungere una condizione come prefisso sempre tramite la direttiva RewriteRule (senza l'utilizzo di RewriteCond) seguita dai caratteri "- [c]":
RewriteRule ^/gallery/ - [c]
RewriteRule (.*)/([^/]*)\.gif$/  $1/home.gif

Tutte le url che iniziano con /gallery/ e richiedono un file .gif vengono redirezionate all'url nome_image/home.gif

Check e Opzioni particolari
E' possibile tramite il segno "!" negare il significato di una regular expression oppure invertire il significato di una condizione:
RewriteCond %{REMOTE_ADDR}  ^192\.168\.*
Esegue la RewriteRule se l'ip del client e' 192.168.*
RewriteCond %{REMOTE_ADDR} ! ^192\.168\.*
Esegue la RewriteRule se l'ip del client non e' 192.168.*

Ecco un elenco delle opzioni più comuni:
-f  Interpreta la test string come un path di un file e verifica che esista:
RewriteCond /home/%{REMOTE_USER}/index.html  -f
-d Interpreta la test string come un path di un directory e verifica che esista:
RewriteCond /home/%{REMOTE_USER}/  -d
-s Interpreta la test string come il path di un file e verifica che la sua dimensione non sia zero
-l Interpreta la test string come il path di un file e verifica che sia un symblic link
< "text" Verifica che la test string sia minore di "text"
> "text" Verifica che la test string sia maggiore di "text"
= "text" Verifica che la test string sia uguale a "text"

Tramite la direttiva RewriteCond è possibile  estrarre il valore di alcune variabili settate nell'environment ed associarle alla direttiva RewriteRule identificandole con %1,%2 e cosi via. Per esempio:
RewriteCond %{LA-U:REMOTE_USER}  ^(.*)$
RewriteRule ^/user-status(.*)$ /cgi/bin/userstatus.cgi$1?user=%1


Se si ha la necessità di specificare molte regole di rewriting o regole che devono essere applicate in casi specifici è conveniente utilizzare le rewrite map.
Le rewrite map sono inizializzabili tramite la direttiva RewriteMap con la seguente sintassi:
RewriteMap name  type:source
Per esempio:
RewriteCond ${LA-U:REMOTE_USER} ^(.*)$
RewriteMap servers  txt:/usr/local/apache/map-peruser/%1.map

Le rewriteMap possono essere dei semplici file di testo, dei DBM database, un programma esterno o una funzione interna.

Privacy Policy