La versione 2.0 del modulo di URL Rewrite per IIS, consente di impostare regole in uscita, cioè valutate in uscita, in risposta, dal server Web al browser dell'utente. Immaginiamo che nella pagina di prima index.php
, che funzionava con i parametri in query string, lo sviluppatore abbia aggiunto un link usando il classico tag <a>
dell'HTML, il suo codice, non pensato per lavorare con il modulo di URL Rewrite conterrà qualcosa del genere:
<a href="<?php echo $_SERVER["ORIG_PATH_INFO"] . "?" . $_SERVER ["QUERY_STRING"] ?>">qui</a> un link a questo articolo
Questo codice fondamentalmente crea un URL nella forma "interna":
/index.php&id=...
Se passiamo il mouse sul link, possiamo visualizzare l'URL che sarebbe inviato al browser, nella barra di stato, come nella figura seguente:
Grazie alle regole in uscita possiamo modificare l'HTML presente nella pagina e sostituire il contenuto con un URL che utilizzi il nostro formato user-friendly.
Dobbiamo creare una regola che funzioni al contrario della precedente e che si attivi sulla risposta inviata dal server al client e non sulla richiesta che il broswer invia al server, come nei casi precedenti.
Per specifare una regola in uscita dalla console di IIS scegliamo "Outbound rules, Blank rule
", come si vede in questa schermata:
A questo punto dobbiamo specificare la regola, definendo una precondizione che dovrà essere valida per la successiva elaborazione. Nel nostro caso specifichiamo che l'header della risposta HTTP deve contenere del testo in HTML, usando l'header HTTP {RESPONSE_CONTENT_TYPE}
e applicando una regular expression per verificare che contenga il pattern ^text/html
. Ecco il risultato nella finestra del wizard:
Specificata la precondizione, definiamo dove effettuare la sostituzione, in questo caso possiamo definire l'elemento HTML , in particolare il tag <a>
, che troviamo tra le scelte disponibili. La parte più difficile è definire anche in questo caso il pattern, ma è possibile, come in precedenza, effettuare dei test di validazione. In figura è mostrata l'impostazione corretta:
La regola definita intercetta le stringhe con suffisso index.php
ed i parametri id
e title
della querystring.
Infine dobbiamo definire l'azione da intraprendere: nel nostro si tratta di un rewrite in cui comporre un nuovo URL. L'espressione regolare intercetta e spezza l'url in tre parti chiamate R0
, R1
e R2
, come si vede effettuando il test di un indirizzo dalla console.
Ecco il risutato nell'ultima sezione per specificare la regola in uscita, dove R1
e R2
puntano agli ultimi due segmenti intercettati dall'URL:
Se ora rilanciamo il file di test usato in precedenza, vediamo che il modulo ha eseguito la sostituzione dell'attributo nel tag <a>
con l'href
rimappato, come in figura:
La configurazione, come sempre, si trova nel web.config
nella root dell'applicazione web, tale file può essere facilmente ispezionato e modificato.