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.
re:Uso avanzato di rewriting2
ma che c'entra con le regole di rewriting di apache?
Rispondire:Uso avanzato di rewriting
out.println(request.getRemoteAddr());
RispondiUso avanzato di rewriting
Ho letto l'articolo dal titolodi sopra e vorrei gentilmente sapere se l'IP è possibileestrarlo con qualche procedura Java.
Grazie mille per la risposta.