• User Newbie

    URL Rewite con Web.config

    Salve a tutti

    utilizzo un codice su web.config per riscrivere in formato url friendly una query string proveniente da un DB ....
    in pratica cliccando su questo link:
    www.miodominio.it/Prodotti/ElencoProdotti.asp?IDC=43&item=Campane-Tibetane
    mi si trasforma in
    www.miodominio.it/Prodotti/Campane-Tibetane-43

    il codice che utilizzo su web.config è questo:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
    <rewrite>
    <rules>

    <rule name="ElencoProdotti 1">
    <match url="ElencoProdotti.asp(.)" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll">
    <add input="{QUERY_STRING}" pattern="^(.
    )IDC=([0-9]+)&item=(.)" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="{C:3}-{C:2}" appendQueryString="false" />
    </rule>
    <rule name="ElencoProdotti 2" stopProcessing="true">
    <match url="^(.
    )-([0-9]+)" ignoreCase="true" />
    <action type="Rewrite" url="ElencoProdotti.asp?IDC={R:2}&item={R:1}" appendQueryString="false" />
    </rule>

    </rules>
    </rewrite>
    </system.webServer>
    </configuration>

    e fin quì tutto funziona regolarmente ..... i problemi nascono quando aggiungo un'altra regola portando il web.config ad essere così:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
    <rewrite>
    <rules>

    <rule name="Prodotti 1">
    <match url="Prodotti.asp(.)" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll">
    <add input="{QUERY_STRING}" pattern="^(.
    )IDM=([0-9]+)&item=(.)" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="{C:3}-{C:2}" appendQueryString="false" />
    </rule>
    <rule name="Prodotti 2" stopProcessing="true">
    <match url="^(.
    )-([0-9]+)" ignoreCase="true" />
    <action type="Rewrite" url="Prodotti.asp?IDM={R:2}&item={R:1}" appendQueryString="false" />
    </rule>

    <rule name="ElencoProdotti 1">
    <match url="ElencoProdotti.asp(.)" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll">
    <add input="{QUERY_STRING}" pattern="^(.
    )IDC=([0-9]+)&item=(.)" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="{C:3}-{C:2}" appendQueryString="false" />
    </rule>
    <rule name="ElencoProdotti 2" stopProcessing="true">
    <match url="^(.
    )-([0-9]+)" ignoreCase="true" />
    <action type="Rewrite" url="ElencoProdotti.asp?IDC={R:2}&item={R:1}" appendQueryString="false" />
    </rule>

    </rules>
    </rewrite>
    </system.webServer>
    </configuration>

    a questo punto il link www.miodominio.it/Prodotti/ElencoProdotti.asp?IDC=43&item=Campane-Tibetane non mi funziona più ... non mi dà errore ma stranamente mi dice che con questa query non trova risultati .... penso di aver trovato il problema, in sostanza il link che passo con la variabile IDC=43 (che sarebbe ID Categoria) non capisco per quale motivo si attiva la prima regola e non la seconda:

    <add input="{QUERY_STRING}" pattern="^(.)IDM=([0-9]+)&item=(.)" ignoreCase="true" />
    <add input="{QUERY_STRING}" pattern="^(.)IDC=([0-9]+)&item=(.)" ignoreCase="true" />

    sapreste darmi dei suggerimenti ?

    Grazie tantissimo


    P 1 Risposta
  • User Newbie

    @Pippino nessuno riesce a darmi una mano ?


  • User

    Sei riuscrito a risolvere?

    Io ho usato un altro metodo per lo stesso problema. Nel Global.asax ho aggiunto la regola:

    routes.MapPageRoute("redirect_url_lezioni"          , "lezioni/{category}"                      , "~/Redirect.aspx");
    

    l'URL in Redirect diventa è una semplice stringa e quindi è più facile fare il redirect nella giusta pagina

    string url = Request.RawUrl.ToString();
    ...
    RedirectHelper.Redirect301(this, urlToRedirect);
    

    P 1 Risposta
  • User Newbie

    @progettospartaco Grazie mille .... infatti avevo abbandonato la strada percorsa perchè non sono riuscito a risolvere.

    Riesci a farmi un esempio più nel dettaglio perchè con quello che mi hai scritto non ho le competenze per risolverlo da solo


  • User

    prova a guardare esempi semplici di Global.asax e routing poi cerca di implementare la tua soluzione ...


    P 1 Risposta
  • User Newbie

    @progettospartaco Ok ... ti ringrazio tantissimo, soltanto una cosa che forse non si evince dal mio post. Siamo in un dominio con pagine in .asp (anche se l'hosting su cui risiede il dominio girano anche pagine asp.net) quindi volevo chiederti se l'implementazione che mi dici di fare può andar bene anche per me.


  • User

    Sinceramente non so perchè ho sempre usato pagine aspx .... cmq con una ricerca ho trovato questo: https://stackoverflow.com/questions/1346228/global-asax-and-classic-asp .... quindi credo di si:

    In Classic ASP, you have the global.asa file to achieve similar functionality to what global.asax does in ASP.NET