Ho utilizzato il routing asp.net per la gestione delle lingue in un sito web registrando nell’Application_Start del Global.asax:
routes.Add("en", New Route("en/{*path}", New GlobalizationRouteHandler(CultureInfo.GetCultureInfo("en"))))
routes.Add("it", New Route("it/{*path}", New GlobalizationRouteHandler(CultureInfo.GetCultureInfo("it-IT"))))
prendendo spunto dal seguente post http://weblogs.asp.net/paulomorgado/archive/2010/01/31/web-site-globalization-with-asp-net-routing.aspxIn questo modo una pagina in lingua inglese viene riscritta come http://www.miosito.com/it/pagina.aspx ed un pagina in lingua inglese come http://www.miosito.com/en/pagina.aspx.Il problema di questa tecnica nasce nel momento in cui alcune pagine appartengono a direttori il cui accesso è limitato dall’ “access rules” standard, aggiungendo quindi al direttorio un file web.config simile al seguente che permette l’accesso al solo ruolo “Admin”:
<configuration> <system.web> <authorization> <allow roles="Admin" /> <deny users="*" /> </authorization> </system.web> </configuration>
Pertanto l’url http://www.miosito.com/direttorio/pagina.aspx viene reindirizzato alla pagina di login a meno che l’utente non sia identificato ed appartenente al ruolo Admin.Se però l’indirizzo diventa http://www.miosito.com/it/direttorio/pagina.aspx, ovvero l’indirizzo riscritto dal routing, la limitazione imposta nel web.config sembra non funzionare ed è possibile accedere alla pagina protetta!Per prevenire questo fenomeno è sufficiente aggiungere al web.config principale del sito:
<location path="it/direttorio"> <system.web> <authorization> <allow roles="Admin"/> <deny users="*" /> </authorization> </system.web> </location> <location path="en/direttorio"> <system.web> <authorization> <allow roles="Admin"/> <deny users="*" /> </authorization> </system.web> </location>