4 messaggi dal 05 giugno 2013
Ciao a tutti, ho provato a cercare sul forum, ma tutti i risultati vengono indirizzati su server con IIS.

Il mio problema è che ho un host su aruba, e vorrei che il cliente oltre che ai fini di indicizzazione, non compaia:
http://www.nomesito.com/promo_dettaglio.asp?ID=4
ma ad esempio
http://www.nomesito.com/promozione-HOLIDAY-BREAKS

Come posso effettuare tutto questo su una semplice pagina ASP?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, benvenuto nel forum!

Con ASP Classico non c'è molto che tu possa fare ma puoi pur sempre ricorrere ad ASP.NET per risolvere questo specifico problema, infatti le due tecnologie possono coesistere.

Proviamo a riscrivere l'URL usando il metodo RewritePath

Crea un file global.asax nella cartella principale del tuo sito, e poi incollaci dentro questo:
<%@ Application Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>

<script runat="server">
        void Application_BeginRequest(object sender, EventArgs e){
      //creo l'espressione regolare che mi cattura gli URL che iniziano con promozione-
            var regex = new Regex("^/promozione-(.*)", RegexOptions.IgnoreCase);
            //controllo l'url
            var match = regex.Match(Request.Url.AbsolutePath);
 
            //se ha trovato delle corrispondenze, riscrivo l'url
            if (match.Success)
                HttpContext.Current.RewritePath("promo_dettaglio.asp?nome=" + match.Groups[1].Value);

        }
</script>
Questo farà in modo che, all'inizio di ogni richiesta, l'URL venga esaminato da un'espressione regolare. Se ad esempio l'URL è promozione-HOLIDAY-BREAKS, allora avverrà una riscrittura verso promo_dettaglio.asp?nome=HOLIDAY-BREAKS.
Questo significa che promo_dettaglio.asp dovrà essere modificata affinché possa lavorare anche con i nomi delle promo.

Prima di fare qualsiasi modifica però controlla che la riscrittura avvenga effettivamente.

ciao
Modificato da BrightSoul il 04 gennaio 2015 11.58 -

Enjoy learning and just keep making
4 messaggi dal 05 giugno 2013
Grazie per la tua risposta!

E' possibile modificare il valore, leggendo il valore dal database stesso contenente il titolo della promozione?

Un pò come faccio con il tag <title> che lo faccio leggere dal database.

Grazie ancora per il tuo aiuto!
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego!

parente89 ha scritto:

E' possibile modificare il valore?

Sì, sarai tu a dover creare i link alle promozioni in questa forma:
/promozione-titolo-della-promozione
Il valore lo leggerai dal database ma non potrai usare la stringa che usi per il <title> tale e quale, perché ci sono delle restrizioni nei caratteri che puoi usare in un URL. Ad esempio dovresti sostituire con un trattino tutti gli spazi presenti nel titolo.
"Titolo della promozione" diventerà così "titolo-della-promozione".
e le lettere accentate dovrebbero essere convertite nella versione senza accento. Qui trovi una funzione Vbscript che ti aiuterà a creare lo slug, cioè appunto questa nuova stringa che deriva dal titolo.
http://www.solveerrors.com/forums/vbscript-general-question-create-slug-from-input-regexp-issue-12610.asp

Poi dovrai essere in grado di risalire alla promozione in base al suo slug, cioè devi metterti in condizione di trovare nel database il record giusto quando la pagina promo_dettaglio viene visitata col nome "titolo-della-promozione".

Puoi salvarti lo slug nel database, su un nuovo campo, così potrai coinvolgerlo in una WHERE.


ciao,
Moreno

Enjoy learning and just keep making
4 messaggi dal 03 aprile 2001
Ciao Moreno

Purtroppo dopo diversi tentativi, devo ammettere che non riesco a far funzionare il codice. Ho salvato nella root del sito (ospitato su Aruba..) il codice da te proposto nel file global.asax e mi sembra.. non c'è altro da fare, nessuna modifica al file web.config o altro.. se non modificare il codice della mia pagina asp per fare una richiesta verso una pagina inesistente, ma venendo intercettata dal file global.asax viene reindirizzata verso la pagina vera, con il parametro querystring nella forma corretta. Credo di aver fatto tutto questo, ma niente, il sito continua a ripetere che la pagina richiesta non esiste, come a far pensare che la presenza del file global.asax non venga rilevata.
Potresti darmi qualche suggerimento ? Ti ringrazio
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

dsroby ha scritto:

come a far pensare che la presenza del file global.asax non venga rilevata.

L'importante è che il tuo sia un hosting Windows che supporta ASP.NET. Siccome sei su Aruba, penso che sia così.

Il problema che stai osservando potrebbe anche dipendere dalla condizione if (match.Success) che trovi nel metodo RiscriviUrl. Se non è mai verificata, la riscrittura non potrà avvenire.

Se effettivamente match.Success è false, allora dipende dall'URL della richiesta, che non è mai conforme all'espressione regolare che trovi nel metodo. parente89 voleva creare degli URL tipo /promozione-QUALCOSA, ma tu ovviamente dovrai adattare l'espressione regolare in base al tuo caso.

Comunque, per non andare a tentativi, dovresti riprodurre il problema in locale, sul tuo PC di sviluppo. Non vorrei sbagliarmi ma penso che il server di Aruba non c'entri nulla.

Se sei abituato ad usare Visual Studio, metti un breakpoint sulla riga dell'if che trovi nel global.asax e poi avvia il debug dell'applicazione (tasto F5). Quando l'esecuzione si interromperà in quei punti, potrai ispezionare il valore di match e match.Success. Questo ti darà delle indicazioni importanti: innanzitutto che il metodo RiscriviURL viene eseguito, e poi se l'espressione regolare è valida o meno.

ciao,
Moreno
Modificato da BrightSoul il 03 gennaio 2015 17.57 -

Enjoy learning and just keep making
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

dsroby ha scritto:

modifica al file web.config

Nel frattempo mi è venuto in mente che forse IIS non sta passando la richiesta al runtime di ASP.NET. Se è così, il global.asax non viene preso in considerazione e perciò la riscrittura non può avvenire. Nel web.config si può indicare che ogni richiesta all'applicazione venga servita dal runtime di ASP.NET.

Scarica questo zip: ci sono dentro il global.asax (leggermente modificato rispetto a quello che avevo postato), il web.config e una pagina .asp dimostrativa.
http://1drv.ms/13QsIJt

Provalo in locale, in un sito IIS. E' importante che la tua versione di IIS (e quella di Aruba) sia la 7 o superiore (cioè windows server 2008 o superiore).

ciao e buona domenica,
Moreno
Modificato da BrightSoul il 04 gennaio 2015 12.07 -

Enjoy learning and just keep making
4 messaggi dal 03 aprile 2001
Ciao Moreno,

ti rispondo in ritardo perchè nel frattempo il lavoro al sito che stavo costruendo mi ha portato a curare altri aspetti... non meno importanti di risolvere il problema trattato in questo thread. :) :) :)

Ti confermo, credo che sia una info importante per tutti coloro che come me, non utilizzano Visual Studio per scrivere il proprio codice, che è necessario inserire nella root del dominio il file web.config contenente almeno i seguenti comandi :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>

ti ringrazio tantissimo, ora il redirect nel mio sito funziona perfettamente !

Roberto
Modificato da dsroby il 23 gennaio 2015 13.32 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.