Scopri la nuova barra del network gt: dacci il tuo feedback. clicca qui X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


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.

Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Seo e Tecnologie > Mod Rewrite e Tecniche di URL Redirect
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti

Mod Rewrite e Tecniche di URL Redirect La riscrittura delle URL e i reindirizzamenti

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


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 15-12-06, 18:11   #1 (permalink)
Moderatore
 
L'avatar di paocavo
 
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)!

paocavo non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 28-02-07, 01:55   #2 (permalink)
Esperto
 
L'avatar di Legolas
 
Data di registrazione: Mar 2005
Messaggi: 661
Invia un messaggio tramite MSN a Legolas Invia un messaggio tramite Skype a Legolas
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);
viene generata un'eccezione. ( e si danno le capocciate nel muro...)
(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));
VB
Codice:
Return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("/Article.aspx",GetType(Page))
Ciao
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago.
Legolas non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 28-02-07, 12:06   #3 (permalink)
Moderatore
 
L'avatar di paocavo
 
Data di registrazione: Mar 2006
Ubicazione: Lecce, Italy
Messaggi: 1,001
Ottimo Legolas!

Grazie per la segnalazione
paocavo non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 28-08-07, 23:19   #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.
Files allegati
Tipo di file: zip UrlRewriter.zip (2.9 KB, 60 visite)

Ultima modifica di omar_ita : 28-08-07 23:21.
omar_ita non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 29-08-07, 00:03   #5 (permalink)
Esperto
 
L'avatar di Legolas
 
Data di registrazione: Mar 2005
Messaggi: 661
Invia un messaggio tramite MSN a Legolas Invia un messaggio tramite Skype a Legolas
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 httpHandler

Approfitto 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 caro web server di visual studio fa funzionare tutto alla grande mentre il buon iis ignora completamente questa regola e quindi l'url www.chetipare.ext/cartella non viene considerato.... questo perchè non c'è la mappatura delle cartelle.
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.
Legolas non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 07-09-07, 13:25   #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));
In sostanza ho solo aggiunto il casting dell'oggetto restituito.
trykel non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 08-09-07, 03:19   #7 (permalink)
Esperto
 
L'avatar di Legolas
 
Data di registrazione: Mar 2005
Messaggi: 661
Invia un messaggio tramite MSN a Legolas Invia un messaggio tramite Skype a Legolas
grande Trykel, adesso è perfetto
__________________
Realizzazione siti viterbo Vacanze da sogno in un Agriturismo Bolsena sulle rive del lago.
Legolas non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 15-09-07, 19:14   #8 (permalink)
 
L'avatar di artistic101
 
Data di registrazione: Apr 2007
Ubicazione: Abruzzo
Messaggi: 510
Quote:
omar_ita Visualizza il messaggio
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.
Sto provando questo metodo ma ottengo sempre errore 404, ho notato che nel Web.config il valore <urlrewrites> non è consentito (compare un warning), sarà per questo che non va?
__________________
Programmi da scaricare
artistic101 ora è in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 15-09-07, 22:09   #9 (permalink)
 
L'avatar di artistic101
 
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
artistic101 ora è in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 06-11-07, 23:12   #10 (permalink)
User
 
Data di registrazione: Feb 2007
Ubicazione: roma
Messaggi: 15
Invia un messaggio tramite MSN a pcinformatica Invia un messaggio tramite Skype a pcinformatica
Come è finita poi la storia? Avete risolto con il multilinguaggio?
__________________
http://www.pcinformatica.eu
pcinformatica non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 15-09-08, 19:53   #11 (permalink)
User Newbie
 
Data di registrazione: Sep 2008
Messaggi: 1
ciao, è possibile che l'httpHandlers ne web.config non mi funzioni? continua a rarmi l'errore 404. la richiesta non viene passata alla classe HttpHandler! qualcuno sa perche'?
Lord_Henry non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 18-08-09, 12:36   #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
vehuel non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 18-08-09, 13:00   #13 (permalink)
Esperto
 
L'avatar di Legolas
 
Data di registrazione: Mar 2005
Messaggi: 661
Invia un messaggio tramite MSN a Legolas Invia un messaggio tramite Skype a Legolas
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.
Legolas non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 18-08-09, 13:04   #14 (permalink)
User
 
Data di registrazione: Sep 2008
Messaggi: 10
Ah ho provato anche io ad installarla ieri, ma non sono riuscito a capire come implementare la regola per il rewriting della pagina dettaglio.aspx?id=1,2,ecc...
Saresti cosi gentile da spiegarmi come si fa?

grazie
vehuel non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 18-08-09, 13:32   #15 (permalink)
Esperto
 
L'avatar di Legolas
 
Data di registrazione: Mar 2005
Messaggi: 661
Invia un messaggio tramite MSN a Legolas Invia un messaggio tramite Skype a Legolas
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.
Legolas non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Rispondi
Tags: , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 14:10.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.