![]() |
![]() |
|
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito. Video IV Convegno gt guarda in video le relazioni dei migliori Esperti SEO Italiani: clicca qui.Esperienze, conoscenze, tecniche in 14 ore di pura condivisione SEO. |
|
|||||||||
Hey Amico Visitatore, Condividi con noi le tue idee e la tua conoscenza Aprendo una nuova discussione nella sezione Mod Rewrite e Tecniche di URL Redirect |
|
|
LinkBack | Strumenti di discussione |
|
|
#1 (permalink) |
|
Moderatore
Data di registrazione: Mar 2006
Ubicazione: Lecce, Italy
Messaggi: 1,001
|
URL REWRITE in ASP.NET 2.0
Segnalo questo utilissimo articolo sul rewriting degli URL in ASP.NET 2.0
Grazie alla potenza del framework .NET è possibile fare cose spettacolari in questo senso: creare il proprio httpHandler! Buon divertimento (e posizionamento)! ![]() |
|
|
|
|
|
#2 (permalink) |
|
Esperto
|
Faccio un piccolo appunto,
purtroppo il rewrite tramite la personalizzazione degli httpHandler funziona solamente con il trust level impostato su full, e generalmente gli hosting condivisi hanno il trust level impostato a medium. Ciò vuol dire che quando il compilatore arriva qui: Codice:
return PageParser.GetCompiledPageInstance("/Article.aspx", context.Server.MapPath("/Article.aspx"), context);
![]() )(solo se si è in medium) Fortunatamente è possibile risolvere quest'inconveniente sostituendo la riga di prima con questa: C# Codice:
return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("/Article.aspx",typeof(Page));
Codice:
Return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("/Article.aspx",GetType(Page))
![]() |
|
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago. |
|
|
|
|
|
|
#4 (permalink) |
|
User
Data di registrazione: Aug 2007
Messaggi: 13
|
Questo codice utilizza un sistema differente: si utilizza l'evento BeginRequest di Application (in Global.asax) per leggere la pagina richiesta (HttpContext.Current.Request.Path) che viene trasformata tramite le regole (che sono in web.config) e reindirizzata tramite HttpContext.Current.RewritePath(string);
Da tenere in considerazione quando si scrivono le regole è che se viene richiesta la pagina: http://www.miosito.it/cartella/pagina.aspx il valore ritornato da HttpContext.Current.Request.Path è /cartella/pagina.aspx In allegato c'è un progetto che potete includere nella vostra soluzione. Nel progetto web mettete un riferimento al progetto URLRewriter (o alla sola dll compilata) e poi in web.config aggiungete: <configuration> <configSections> <sectionGroup name="system.web"> <section name="urlrewrites" type="URLRewriter.Rewriter, URLRewriter"/> ... ... nella sezione configuration/configSections/sectionGroup e poi nella sezione <system.web> aggiungere: <urlrewrites> <rule> <url>^/[^/,]*,([0-9]*)\.aspx</url> <rewrite>/showpage.aspx?id=$1</rewrite> </rule> </urlrewrites> in <url> c'è l'url originale e in <rewrite> quello riscritto (tramite regexp). Può essere aggiunto un numero qualsiasi di elementi <rule>. Questa regola (per chi non è partico di espressioni regolari) ad esempio cerca / all'inizio dell'indirizzo, poi una sequenza di caratteri qualsiasi escluso / e "," poi una virgola, una serie di cifre numeriche, il punto (che viene trattato tramite escape "\") e aspx (se si cercano altre estensioni il metodo BeginRequest non viene invocato ). La stringa viene sostituita con:/showpage.aspx?id=... (il numero letto dall'espressione precedente). Ad esempio: /pagina_interessante,2.aspx diventa /showpage.aspx?id=2. Da notare che l'url visualizza /pagina_interessante,2.aspx mentre in realtà la pagina caricata è showpage.aspx che leggerà il valore id in maniera assolutamente normale da QueryString. Infine creare la pagina Global.asax. ASP.NET 2.0 non ha molta simpatia per questa pagina: deve essere creata "manualmente" scrivendo dentro: <%@ Application Inherits="Global" %> Il code behind non può essere inserito nel ramo principale (viene ignorato) ma deve essere creato nella cartella app.code e contiene il seguente codice: using System; using System.Web; public class Global : System.Web.HttpApplication { protected void Application_BeginRequest(object sender, EventArgs e) { string originalPath = HttpContext.Current.Request.Path; string zSubst = URLRewriter.Rewriter.Process(originalPath); if (zSubst.Length > 0 && !originalPath.Equals(zSubst)) HttpContext.Current.RewritePath(zSubst); } } Con questo sistema non mi sembra ci siano problemi di trust level. Il sistema dovrebbe funzionare anche su asp.net 1.1 con opportune modifiche. |
|
Ultima modifica di omar_ita : 28-08-07 23:21. |
|
|
|
|
|
|
#5 (permalink) |
|
Esperto
|
ottimo, grazie omar_ita, appena ho un po' di tempo lo voglio provare, proprio ora sto sbattendo la testa nella creazione di un motore rewrite per un sito multilingua dinamico
utilizzando gli httpHandlerApprofitto per avvertire tutti coloro che utilizzano questo sistema che quando si tenta di scrivere una regola in questo modo Codice:
<add verb="*" path="/cartella/*" type="Namespace.UrlRewrite" /> Il problema si risolve creando la suddetta mappatura peccato che iss inizierà a dare problemi con gli url, personalmente non ho approfondito la questione per motivi di tempo, probabilmente anche questo comportamento è facilmente correggibile. ![]() |
|
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago. |
|
|
|
|
|
|
#6 (permalink) |
|
User
Data di registrazione: Aug 2007
Messaggi: 17
|
Legolas,
grazie per la correzione allo script segnalato da paocavo, però avendolo utilizzato ho dovuto apportare una piccola modifica per farlo funzionare. Codice:
return (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath("~/Article.aspx", typeof(Page));
|
|
|
|
|
|
#7 (permalink) |
|
Esperto
|
grande Trykel, adesso è perfetto
![]() |
|
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago. |
|
|
|
|
|
|
#8 (permalink) | |
|
Data di registrazione: Apr 2007
Ubicazione: Abruzzo
Messaggi: 510
|
Quote:
![]() | |
|
__________________
Programmi da scaricare |
||
|
|
|
|
|
#9 (permalink) |
|
Data di registrazione: Apr 2007
Ubicazione: Abruzzo
Messaggi: 510
|
Credo di aver risolto, mi è rimasto l'ultimo problema: come mai la variabile $1 mi risulta sempre vuota?
|
|
__________________
Programmi da scaricare |
|
|
|
|
|
|
#12 (permalink) |
|
User
Data di registrazione: Sep 2008
Messaggi: 10
|
Sto cercando di implementare l'url rewrite nel mio sito ma ammetto che sto incontrando notevoli difficoltà, forse sbaglio l'approccio alla soluzione. In pratica vorrei che tutte le chiamate alla pagina dettaglio.aspx?id=1,2,3 ecc...... divenissero url statici.
Ho seguito passo passo le iostruzioni, ho compilato la dll, ho inserito nel global.asax nell'application begin_request il seguente codice: string originalPath = HttpContext.Current.Request.Path; string zSubst = URLRewriter.Rewriter.Process(originalPath); if (zSubst.Length > 0 && !originalPath.Equals(zSubst)) HttpContext.Current.RewritePath(zSubst); Poi nel web.config: <configSections> <sectionGroupname="system.web"> <sectionname="urlrewrites"type="URLRewriter.Rewriter, URLRewriter"/> </sectionGroup> </configSections> ed infine in system web: <urlrewrites> <rule> <url>^/[^/,]*,([0-9]*)\.aspx</url> <rewrite>/dettaglio.aspx?id=$1</rewrite> </rule> </urlrewrites> Ma gli url non vengono riscritti, riuscireste a darmi una mano per favore? grazie |
|
|
|
|
|
#13 (permalink) |
|
Esperto
|
Vi segnalo questa utilissima dll open source che utilizzo anche io per implementare l'url rewrite http://urlrewriter.net/
|
|
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago. |
|
|
|
|
|
|
#15 (permalink) |
|
Esperto
|
Auesto potrebbe essere un esempio di web.config:
in pratica viene riconosciuto un url di questo ripo : www.sito.ext/prodotto/scarpe-da-tennis.aspx L'engine richiamerà la pagina dettaglio.aspx passandogli come paramentro: scarpe-da-tennis.aspx che poi potrai utilizzare per ritrovare il prodotto esatto Codice:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
<system.web>
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/>
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter"/>
</httpModules>
</system.web>
<rewriter>
<rewrite url="~/prodotto\/(.+/)?(.+\.aspx)" to="~/dettaglio.aspx?page=$2"/>
</rewriter>
</configuration>
|
|
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago. |
|
|
|
|