Url rewriting SOS lo peu compris ! [Résolu]

Signaler
Messages postés
54
Date d'inscription
vendredi 1 février 2002
Statut
Membre
Dernière intervention
8 février 2007
-
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009
-
mon site à plus de 30000 références
j'utilise la dll URLRewriter
je programme en aps.net VB
je viens donc de comprendre que dans mon code rien ne bouge.

Ze bleme !

dans un datagrid j'affiche mes famille d'article
quand je clique sur une des familles, la page centrale m'affiche mes sous familles dans un autre datagrid
quand je clique sur une sous famille ma page centrale m'affiche mes articles (par marque par exemple)

donc pour résumer j'ai pas mal...

-----------------d'images dans mon datagrid

' ImageAlign= "Top">

------------------de liens aussi dans mon datagrid

<HeaderStyle Width="20%"></HeaderStyle>


'
NavigateURL ='<%# "produit.aspx?idprod=" &amp;
DataBinder.eval(Container.DataItem,"id_produit") &amp; "&amp;Id=" &amp;
Request("Id") &amp; "&amp;Cat=" &amp;
Request("Cat") &amp; "&amp;ISelect=" &amp;
request("ISelect") &amp; "&amp;idcat=" &amp;
request("idcat") %>'>




comment faire concretement !
si j'ai bien tout compris je ne change rien au niveau de ma page aspx (et de mes datagrid donc)

mais alors au niveau du web.config ?
Je ne peux me tourner que vers des expressions régulières pour avoir (comme dans un supermarché par exemple)
monsite.com\viande\boeuf\detail\cotepremiere.aspx
monsite.com\electromenager\cuisine\petitsrobots\hachoirs\seb.aspx
monsite.com\electromenager\cuisine\petitsrobots\hachoirs\tous.aspx

les exemples du style
<LookFor>~/Products/Beverages\.aspx</LookFor>
<SendTo>~/ListProductsByCategory.aspx?CategoryID=1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Products/Condiments\.aspx</LookFor>
<SendTo>~/ListProductsByCategory.aspx?CategoryID=2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/Products/Confections\.aspx</LookFor>
<SendTo>~/ListProductsByCategory.aspx?CategoryID=3</SendTo>

ne m'apportent pas de réponses !
ils sont trop simplistes pour être transposés dans mon cas.
Pour comprendre j'ai besoin de concret

voici un exemple de mon web.config avec ce que je voudrais obtenir

<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>

<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/planetehyper/Produits/luminaire/Philips_accu-5\.aspx</LookFor>
<SendTo>~/planetehyper/produit.aspx?idprod=61&amp;Id=7&amp;Cat=21&amp;ISelect=1&amp;idcat=0</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/planetehyper/Produits/sanitaire/papier_toilette_Générique_tripleFeuille\.aspx</LookFor>
<SendTo>~/planetehyper/produit.aspx?idprod=59&amp;Id=7&amp;Cat=21&amp;ISelect=1&amp;idcat=0</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>

merci de bien vouloir m'aider

Léo dit dedZep
----------------------
pour acheter sur le Net il faut une carte bleue
Léo Tseu

11 réponses

Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

Mais de rien !
Et voici cette fonction (que j'ai trouvé et un peu améliorer pour le référencement) et qui marche très bien pour dégager tous les caractéres spéciaux...
Bon courage !

    Public Shared Function Modifcarracters(ByVal UnMot As String) As String
        UnMot = Replace(UnMot, Chr(138), "S")
        UnMot = Replace(UnMot, Chr(142), "Z")

        UnMot = Replace(UnMot, Chr(141), "-")
        UnMot = Replace(UnMot, Chr(142), "-")
        UnMot = Replace(UnMot, Chr(143), "-")
        UnMot = Replace(UnMot, Chr(144), "-")
        UnMot = Replace(UnMot, Chr(58), "-") ':
        UnMot = Replace(UnMot, Chr(38), "-") '&

        UnMot = Replace(UnMot, Chr(158), "z")
        UnMot = Replace(UnMot, Chr(159), "Y")
        UnMot = Replace(UnMot, Chr(192), "A")
        UnMot = Replace(UnMot, Chr(193), "A")
        UnMot = Replace(UnMot, Chr(194), "A")
        UnMot = Replace(UnMot, Chr(195), "A")
        UnMot = Replace(UnMot, Chr(196), "A")
        UnMot = Replace(UnMot, Chr(197), "A")
        UnMot = Replace(UnMot, Chr(200), "E")
        UnMot = Replace(UnMot, Chr(201), "E")
        UnMot = Replace(UnMot, Chr(202), "E")
        UnMot = Replace(UnMot, Chr(203), "E")
        UnMot = Replace(UnMot, Chr(204), "I")
        UnMot = Replace(UnMot, Chr(205), "I")
        UnMot = Replace(UnMot, Chr(206), "I")
        UnMot = Replace(UnMot, Chr(207), "I")
        UnMot = Replace(UnMot, Chr(208), "D")
        UnMot = Replace(UnMot, Chr(209), "N")
        UnMot = Replace(UnMot, Chr(210), "O")
        UnMot = Replace(UnMot, Chr(211), "O")
        UnMot = Replace(UnMot, Chr(212), "O")
        UnMot = Replace(UnMot, Chr(213), "O")
        UnMot = Replace(UnMot, Chr(214), "O")
        UnMot = Replace(UnMot, Chr(217), "U")
        UnMot = Replace(UnMot, Chr(218), "U")
        UnMot = Replace(UnMot, Chr(219), "U")
        UnMot = Replace(UnMot, Chr(220), "U")
        UnMot = Replace(UnMot, Chr(221), "Z")
        UnMot = Replace(UnMot, Chr(224), "a")
        UnMot = Replace(UnMot, Chr(225), "a")
        UnMot = Replace(UnMot, Chr(226), "a")
        UnMot = Replace(UnMot, Chr(227), "a")
        UnMot = Replace(UnMot, Chr(228), "a")
        UnMot = Replace(UnMot, Chr(229), "a")
        UnMot = Replace(UnMot, Chr(231), "c")
        UnMot = Replace(UnMot, Chr(232), "e")
        UnMot = Replace(UnMot, Chr(233), "e")
        UnMot = Replace(UnMot, Chr(234), "e")
        UnMot = Replace(UnMot, Chr(235), "e")
        UnMot = Replace(UnMot, Chr(236), "i")
        UnMot = Replace(UnMot, Chr(237), "i")
        UnMot = Replace(UnMot, Chr(238), "i")
        UnMot = Replace(UnMot, Chr(239), "i")
        UnMot = Replace(UnMot, Chr(241), "n")
        UnMot = Replace(UnMot, Chr(242), "o")
        UnMot = Replace(UnMot, Chr(243), "o")
        UnMot = Replace(UnMot, Chr(244), "o")
        UnMot = Replace(UnMot, Chr(245), "o")
        UnMot = Replace(UnMot, Chr(246), "o")
        UnMot = Replace(UnMot, Chr(249), "u")
        UnMot = Replace(UnMot, Chr(250), "u")
        UnMot = Replace(UnMot, Chr(251), "u")
        UnMot = Replace(UnMot, Chr(252), "u")
        UnMot = Replace(UnMot, Chr(253), "y")
        UnMot = Replace(UnMot, Chr(255), "y")
        Return CStr(UnMot)
    End Function
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

Tu peux essayer ça (dans ma solution, je met quand meme l'identifiant, mais j'enléve les caractéres spéciaux et je met les mots clefs)
<RewriterRule>
        <LookFor>~/Itineraires/(.*)_(.*).html</LookFor>
        <SendTo>~/Itineraires/voyage.aspx?circ=$1</SendTo>
 </RewriterRule>

Je fait une fonction pour créer mon url de façon dynamique (avec les mots clefs) :
  Public Function UrlCompose(ByVal id As String, Optional ByVal pays As String "", Optional ByVal libelle As String "") As String

        Dim myString As New System.Text.StringBuilder
        Dim strTraitement As String

        myString.Append(id)
        myString.Append("_")
        myString.Append(pays)
        myString.Append("-")
        myString.Append(libelle)

        strTraitement = myString.ToString
        strTraitement = LCase(Modifcarracters(strTraitement))

        myString.Replace(myString.ToString, strTraitement)

        myString.Replace(" ", "-")
        myString.Replace("-le-", "-")
        myString.Replace("-la-", "-")
        myString.Replace("-les-", "-")
        myString.Replace("-du-", "-")
        myString.Replace("-de-", "-")
        myString.Replace("-des-", "-")
        myString.Replace("-a-", "-")
        myString.Replace("-au-", "-")
        myString.Replace("---", "-")
        myString.Replace("--", "-")
        myString.Append(".html")

        Return myString.ToString

    End Function

DONC :
~/Itineraires/909_chine-trois-joyaux.html
renvoi sur :
~/Itineraires/voyage.aspx?Circ=909

EXPLICATION :
En fait je dit dans ma régle que tout ce qui est avant "_" est mon identifiant et je le récupére ensuite pour composer mon URL.

C'est clair que dans ton cas, il va falloir aller un peu plus loin avec les expressions régulière mais c'est tout à fait possible je pense.

Bon courage.
Messages postés
54
Date d'inscription
vendredi 1 février 2002
Statut
Membre
Dernière intervention
8 février 2007

Merci, mille fois merci !
ton truc est simplement et meveilleusement documenté !
je travaille maintenant avec .net 2.0 et ThunderMain.URLRewriter.dll
et des regles simples dans mon web.config genre
   </rule>
   <rule>
    home-pays_([0-9]*)_boutique_([0-9]*).html
    <rewrite>Default2.aspx?id_langue=$1?id_boutique=$2</rewrite>
   </rule>
  

ceci dit je garde dans un coin ton idée car elle est facile a mettre en oeuvre
merci encore

Léo dit dedZep
----------------------
pour acheter sur le Net il faut une carte bleue
Léo Tseu
Messages postés
136
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 avril 2009

Salut  quineman,

Ton exemple m'intéresse mais je ne comprends pas bien. Tu crées la fonction UrlCompose pour retravailler ton Url mais je ne comprends pas comment tu appelles cette fonction mais surtout comment tu affectes le résultats retourné à l'URL de ta page pour la modifier...en apparence.

Pourrais tu me donner deux trois explications STP ?
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

Hello, En fait, c'est pratique comme solution mais il n'empêche que pour la mettre en place, il faudras que tu l'utilise à chaque fois que tu as un lien rewrité... Dès qu'un lien apparait dans une page, tu prends les éléments de la régle et tu les compose dans la fonction (donc ma fonction est simplement un exemple , elle dépent étroitement de ta règle).
Il est bien évident que cette solution est utile dans certains cas seulement : quand c'est une fiche produit comme dedzep, ca permet de ne pas avoir un web config de 1 Mo... Et surtout ça se met à jour automatiquement.
Pour faire un truc super carré, il faux réflechir ensuite à faire une redirection 301 sur l'ancienne URL, mais ça c'est une autre histoire. J'y réflechis...
Bon courage !
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

A mettre sur la page produit :
Si nous n'avons pas fait de redirection (c'est à dire que la page n'est pas en .html), alors on redirige en 301.
Pour voir l'url brut, on utilise la méthode System.Web.HttpContext.Current.Request.RawUrl

Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete

        '-
        '- Gestion de la redirection de type 301
        '- Si la page produit.aspx est appelée, alors on redirige en 301
        '- lblPays et lblLibelle servent à créer de façon dynamique l'URL
        '-

        If Not InStr(System.Web.HttpContext.Current.Request.RawUrl, ".htm") > 1 Then

            Dim maRedirection As String
            Dim MyUrlRewrite As New RewriteURL

            maRedirection = MyUrlRewrite.UrlCompose(Request.QueryString("circ"), lblPays.Text, lblLibelle.Text)
            Response.Status = "301 moved permanently"
            Response.AddHeader("location", maRedirection)
            Response.End()

        End If

    End Sub
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009

Je viens d'intégrer ce rewriting sur mon site et en local, tout est opérationnel. MAIS :( ....
Une fois sure mon site Internet, lorsque je clique sur un lien , j'ai une erreur 404 :(
HELP ... pour info, J'ai un serveur Windows 2003 Server Standard

Je compte sur vous

vladam
(pour vous servir :) )
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

As tu excactement le même web.config ? avec la partie handler... Et les régles à la virgule près...
Je ne me souviens plus s'il y a une dll mais vérifie aussi ton dossier bin.
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009

c'est effectivement le même, j'ai envoyé le site en ligne avec l'assistant de déploiement du studio 2005.
Je viens de controler que la dll est bien dans le /bin aussi.
Voila mon web.config en ligne :
<?

xmlversion="
1.0"
?><

configuration><

configSections><

sectionname="
dataConfiguration"
type="
Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"
/><

sectionGroupname="
system.web"
><

sectionname="
urlrewrites"
type="
ThunderMain.URLRewriter.Rewriter, ThunderMain.URLRewriter, Version=1.0.783.30976, Culture=neutral, PublicKeyToken=7a95f6f4820c8dc3"
/></

sectionGroup></

configSections><

appSettings>

<addkey="
NbCardByPage"
value="
30"
/></

appSettings><

connectionStrings><

addname="
MargoDatabase"
connectionString="
Data Source=localhost;Initial Catalog=Margo_Database;Persist Security Info=True;User ID=XXXX;Password=XXXX"
providerName="
System.Data.SqlClient"
/></

connectionStrings><

dataConfigurationdefaultDatabase="
MargoDatabase"
/><

system.web><

urlrewrites><

rule><

url>page_theme/(.*)/([0-9]*)/Pge/([0-9]*)
</url><

rewrite>themes.aspx?rel=$2
&amp;Pge=$3
</rewrite></

rule><

rule><

url>theme/(.*)/([0-9]*)
</url><

rewrite>themes.aspx?rel=$2
</rewrite></

rule><

rule><

url>ecards/(.*)/ecard/([0-9]*)
</url><

rewrite>Step1.aspx?rel=$2
</rewrite></

rule></

urlrewrites><

traceenabled="
false"
localOnly="
true"
pageOutput="
false"
traceMode="
SortByTime"
/><

customErrorsmode="
Off"
/><

authenticationmode="
Windows"
/><

compilationdebug="
true"
defaultLanguage="
c#"
><

assemblies><

addassembly="
System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
/><

addassembly="
System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
/><

addassembly="
System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
/></

assemblies></

compilation></

system.web></

configuration>et voila celui en local ou tout est ok :
<?

xmlversion="
1.0"
?><

configuration><

configSections><

sectionname="
dataConfiguration"
type="
Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"
/><

sectionGroupname="
system.web"
><

sectionname="
urlrewrites"
type="
ThunderMain.URLRewriter.Rewriter, ThunderMain.URLRewriter, Version=1.0.783.30976, Culture=neutral, PublicKeyToken=7a95f6f4820c8dc3"
/></

sectionGroup></

configSections><

appSettings>

<

addkey="
NbCardByPage"
value="
30"
/></

appSettings><

connectionStrings><

addname="
MargoDatabase"
connectionString="
server=PORT-JPI;database=Margo_Database;Integrated Security=true"

providerName="
System.Data.SqlClient"
/></

connectionStrings><

dataConfigurationdefaultDatabase="
MargoDatabase"
/><

system.web><

urlrewrites><

rule><

url>page_theme/(.*)/([0-9]*)/Pge/([0-9]*)
</url><

rewrite>themes.aspx?rel=$2
&amp;Pge=$3
</rewrite></

rule><

rule><

url>theme/(.*)/([0-9]*)
</url><

rewrite>themes.aspx?rel=$2
</rewrite></

rule><

rule><

url>ecards/(.*)/ecard/([0-9]*)
</url><

rewrite>Step1.aspx?rel=$2
</rewrite></

rule></

urlrewrites><

traceenabled="
true"
localOnly="
false"
pageOutput="
true"
traceMode="
SortByTime"
/><

customErrorsmode="
Off"
/><

authenticationmode="
Windows"
/><

compilationdebug="
true"
><

assemblies><

addassembly="
System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
/><

addassembly="
System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
/><

addassembly="
System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
/></assemblies></

compilation></

system.web></

configuration>Je ne comprends pas

vladam
(pour vous servir :) )
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009

j'ai l'impression qu'il ne passe pas dans le :

protected
void Application_BeginRequest(
Object sender,
EventArgs e){

        ThunderMain.URLRewriter.

Rewriter.Process();}

vladam
(pour vous servir :) )
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009

Je viens de faire un HTTPModule avec sa déclaration dans le web.config et tout est parfait chez moi, mais ... Toujours pas sur le serveur Windows 2003 qui me fait une erreur 404 :(

Que faire .... je démoralise

vladam
(pour vous servir :) )