URL Rewriting in ASP!
Programmazione Friday 18 May 2007 alle 11:19Ce l’ho fatta! Sono riuscito ad applicare la riscrittura degli URL (URL Rewrite) ad un sito scritto in ASP Classic, su server con windows 2000 e IIS 5.0, usando la componente ISAPI Rewrite.
Premetto che ho preso in considerazione la versione Lite (che tra l’altro è anche completamente gratuita!!) che permette solamente di configurare un unico sito per server, ma offre tutte le funzionalità di riscrittura degli URL. Dopo aver installato la componente, potrete vedere nella sua directory solamente 3 file (httpd.ini, ISAPI_Rewrite.dll e RxTest.exe): se avete utilizzato la versione autoinstallante, l’unica cosa che dovrete cominciare a fare è compilare il file httpd.ini esattamente come il file .httaccess in Server Apache: RewriteCond e RewriteRule sono molto simili, cambiano solo le lettere per dichiarare le opzioni di reindirizzamento di cui parlerò in seguito.
Preparativi per l’URL Rewrite
Innanzitutto è opportuno configurare il proprio sito web secondo una certa logica per non ritrovarsi a lavorare milioni di volte. Evitiamo dunque di scrivere direttamente i link all’interno delle pagine web (che, per carità, se utilizziamo un distema dinamico potrebbero essere anche poche) e utilizziamo invece una funzione che creeremo ad hoc (per motivi sempre di praticità, consiglio di crearla su un file esterno da importare attraverso la direttiva <!–#import virtual=”nomefile.asp”–>).
La funzione, che prende in ingresso 3 parametri, potrebbe essere così definita:
url_rewrite = false function getURL(par1, par2, par3) if( url_rewrite ) then ...scrivo URL in bella forma else ...scrivo URL normale, con QueryString end if getURL = URL end function
Una funzione così strutturata mi permetterà di avere due diversi modi di riscrittura, quello normale (con parametri passati per GET nella QueryString insomma) e quella da riscrivere tramite l’ausilio della nostra componente. E tutto sarà semplicemente fattibile modificando la variabile url_rewrite: false per il sistema classico e true per il sistema riscritto e più “bello”!!!
Configurare l’URL Rewrite nel file httpd.ini
Dobbiamo innanzitutto capire come vogliamo che i nostri URL appaiano agli utenti (e di conseguenza anche ad i motori di ricerca). Il consiglio che viene sempre dato è quello di utilizzare, nell’URI anche il titolo della pagina che si andrà a personalizzare, così che, anche guardando direttamente l’URL si possa capire cosa contiene. Per andare a “scrivere” i link come qui sotto dovete utilizzare la funzione getURL() creata precedentemente, nel ramo dell’IF positivo (primo blocco).
Consiglio link che abbiano più o meno questa forma:
http://www.miosito.ext/par1/titolo-del-post.html
http://www.miosito.ext/par1/titolo-con-parametro-1/par2/titolo-dell-altro-post.html
http://www.miosito.ext/p/par3/titolo-di-un-altro-articolo.html
Supponendo che par1, par2 e par3 siano numeri interi indicanti gli ID dei contenuti del database, possibili regole per reindirizzare questi URL saranno:
RewriteRule /(\d+)/([^/\.]+).html$ /index.asp?par1=$1 [L]
RewriteRule /(\d+)/([^/\.]+)/(\d+)/([^/\.]+).html$ /index.asp?par1=$1&par2=$3 [L]
RewriteRule /p/(\d+)/([^/\.]+).html$ /pagina.asp?par3=$1 [L]
Già fatto?! SI!!!
Google e gli altri motori di ricerca cosa pensano della riscrittura degli URL?
NON sono un SEO, ma ragionate semplicemente a quello che state per leggere: è più facile, per voi, ricordare un link nella forma http://simone.cabrino.it/2007/05/14/migliorare-la-navigazione-dei-siti-a-frame/ oppure qualcosa nella forma http://simone.cabrino.it/article.php?id=##&browser=Mozilla&style=articolosingolo?!!? Ok, forse ho esagerato ed esasperato un po’ il concetto, ma penso di aver reso sufficientemente bene l’idea.
Molti SEO consigliano e spingono per l’URL Rewriting dandone le giuste argomentazioni:
- URL Rewriting: serve ancora! di Simone Carletti;
- URL Rewriting: non serve più? di Tagliaerbe;
Conclusioni
Come avete avuto modo di vedere da questa pagina, creare un buon URL Rewriting non è una cosa impossibile, anzi è abbbastanza semplice una volta capite le basi delle Regular Expression (RegEx). Semplici da creare, ottimo per i motori di ricerca e bello fa vedere e da ricordare.
Perchè allora non prendere in considerazione di farlo!?

1 February 2008 alle 20:37
Dopo 2 giorni e 2 notti di interminabile lavoro dovuto allo spostamento di un portale da un 2000 server ad un 2003 server sul quale il vecchio componente che rende statiche le URL non funziona più, ho installato isapi rewrite e grazie al tuo breve post son riuscito a rivedere un pò di luce.
Ma sono qui a chiederti aiuto e delucidazioni.
Con questa RewriteRule /pagina/(\d+)/([^/\.]+)_(\d+)/([^/\.]+).html$ /html/go.asp?rifpag=$1&id=$3 [L] riesco a gestire quasi tutto ma non basta.
In particolare il rewrite non va più se:
- ovviamente se la stringa non ha un id= ma solo rif=
- il secondo paramento non è id= ma for=
- ho un terzo, quarto, quinto, etc. paramento
Puoi aiutarmi o darmi delucidazioni su come generalizzare la mia funzione?
Grazie
1 February 2008 alle 21:58
Penso non sia possibile generalizzare ancora la tua funzione di riscrittura URI.
1) Se non hai una id= puoi creare un’altra riga di rewrite che non tenga conto del secondo parametro, qualcosa tipo RewriteRule /pagina/(\d+)/([^/\.]+).html$ /html/go.asp?rifpag=$1 [L]
2) Il mio consiglio, per velocizzarti il lavoro e ottenere qualcosa di semplice da configurare, è creare una “nuova” regola di riscrittura che adotti magari un parametro differente, quindi utilizzare una “chiave” differente al posto di /pagina/.
3) In base al “layout” di riscrittura, regole contenenti più parametri, in base all’esigenza, un po’ come dal punto 1) passi alla regola da te già utilizzata.
Potrebbe andare, no?
2 February 2008 alle 13:12
Rifunziona tutto ma grazie a 5 stringhe da esaurimento:
RewriteRule /pagina/(\d+)/([^/\.]+).html$ /html/go.asp?rifpag=$1 [L]
RewriteRule /pagina/(\d+)/([^/\.]+)_([^/\.]+)/([^/\.]+).html$ /html/go.asp?rifpag=$1&$2=$3 [L]
RewriteRule /pagina/(\d+)/([^/\.]+)_([^/\.]+)/([^/\.]+)_([^/\.]+)/([^/\.]+).html$ /html/go.asp?rifpag=$1&$2=$3&$4=$5 [L]
RewriteRule /pagina/(\d+)/([^/\.]+)_([^/\.]+)/([^/\.]+)_([^/\.]+)/([^/\.]+)_([^/\.]+)/([^/\.]+).html$ /html/go.asp?rifpag=$1&$2=$3&$4=$5&$6=$7 [L]
Secondo me da qualche parte si può intervenire con qualche metodo ricorsivo. Comunque funziona tutto. Secondo te 5 stringhe rallentano un pò l’esecuzione delle pagine?
2 February 2008 alle 13:20
No, assolutamente. Soprattuto la direttiva che utilizzi a fine riga [L] (Last Rule), blocca la riscrittura se si verifica completamente quel tipo di forma. Presumendo che la regola con 7 variabili sia un caso quasi “unico”, viene eseguita solo dopo aver “verificato” le altre.
Questo sito di cui ho curato la riscrittura URI ha molto più di 5 regole e, come puoi vedere, non ha rallentamenti significativi.