URL Rewriting recursif en ajoutant du texte dans l'URL à la

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

KERIN
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 22 Mar 2005

URL Rewriting recursif en ajoutant du texte dans l'URL à la

Message le Lun Aoû 01, 2005 17:11

Bonjour à tous

J'ai lu les articles de Dan chez WebmasterHub et j'ai trouvé très intéressant d'utiliser la récursivité. Je me suis donc lancé mais en ajoutant une difficulté "FATALLE": Je souhaite pouvoir ajouter du texte à la suite des variables.

par exemple:
/var1-val1-var2-val2/mon-texte-pour-compliquer.html
qui serait donc réécrit:
index.php?var1=val1&var2=val2

Mon délimiteur variables - texte serait le caractère "/"

Le processus normal serait:
1) supprimer tout ce qui est après le dernier "/" dans l'URL et rediriger sur tout ce qu'il y avait avant
2) utiliser la récurssion de Dan pour récupérer mes variables.

Séquanciellement ca devrait nous donner:
/var1-val1-var2-val2/mon-texte-pour-compliquer.html
/var1-val1-var2-val2.html
/var1-val1&var2=val2.html
/index.php?var1=val1&var2=val2


FACILLEEEE que je vous entend déja faire... ben j'y suis depuis 2heures et j'ai un comportement plustot étrange de la part d'apache.
Voici mon .htaccess:

Code: Tout sélectionner
RewriteEngine on
RewriteRule (.+)/([^/]+)\.html $1\.html
RewriteRule (.+)-([^-]+)-([^-&]*)([^-]*)\.html $1&$2=$3$4\.html [N]
RewriteRule ([^-]+)-([^-]*)(.*)\.html index2.php?$1=$2$3 [L]


et voila le log sorti du ModRewrite:
Code: Tout sélectionner
  rewrite lang-fr-category_id-21-action-view/les-clubs.html -> lang-fr-category_id-21-action-view.html
  rewrite lang-fr-category_id-21-action-view.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html
  rewrite lang-fr-category_id-21-action-view.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
  rewrite lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html/les-clubs.html -> lang-fr-category_id-21-action-view.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html


Vous l'avez compris, lors de la réécriture, Apache a une sérieuse tendance à me rajouter "/les=clubs.html" et à rentrer dans une boucle infinie...

J'ai essayé plusieurs choses:
d'une l'instruction:
Code: Tout sélectionner
RewriteRule (.+)/([^/]+)\.html $1\.html

SEULE, me redirige bien
/lang-fr-category_id-21-action-view/les-clubs.html
vers
/lang-fr-category_id-21-action-view.html

Donc apres je comprend pas trop pourquoi il me rajoute toujours des merdes à la fin... j'ai essayé des milliers de trucs et... sans succès, si quelqu'un peut m'aider :)

Merciiiiiii[/i]


correiaj
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 25 Avr 2005

Message le Lun Aoû 01, 2005 18:13

Fracnhement, en réféchissant un peu, tu verras que tu peux tout faire en une seule règle:
pour un truc du genre:
Var1-Val1-Var2-Val2/texte.html

RewriteRule var1-([a-z0-9]+)-var2-([a-z0-9]+)/.* http://tonsite/index.php?var1=$1&var2=$2 [L-NC]


correiaj
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 25 Avr 2005

Message le Lun Aoû 01, 2005 18:18

ou avec les pattern [^-] et [^/] puisque tu aime bien :-)


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Lun Aoû 01, 2005 18:27

KERIN a écrit:je comprend pas trop pourquoi il me rajoute toujours des merdes à la fin... j'ai essayé des milliers de trucs et... sans succès, si quelqu'un peut m'aider :)

Ca vient du fait que tu n'as pas mis de ^ et de $ dans ton expression régulière. Ce qui fait qu'Apache s'emmêle un peu les pinceaux quand il rencontre la règle :
Code: Tout sélectionner
RewriteRule (.+)/([^/]+)\.html $1\.html

Du coup quand tu tapes l'url :
Code: Tout sélectionner
lang-fr-category_id-21-action-view/les-clubs.html

Alors Apache va obéir à ta règle et transformer cette requête en :
Code: Tout sélectionner
lang-fr-category_id-21-action-view.html

Mais ensuite il va substituer la chaîne :
Code: Tout sélectionner
lang-fr-category_id-21-action-view/les-clubs.html

par ...
Code: Tout sélectionner
lang-fr-category_id-21-action-view.html/les-clubs.html


Et la boucle est infinie.

Essaie plutôt comme regexp la suivante :
Code: Tout sélectionner
RewriteRule ^([^/]+)/[^/]+\.html$ $1\.html


correiaj a écrit:Tu verras que tu peux tout faire en une seule règle:
RewriteRule var1-([a-z0-9]+)-var2-([a-z0-9]+)/.* http://tonsite/index.php?var1=$1&var2=$2 [L-NC]

Tout-à-fait d'accord avec toi Correiaj sur le principe ;) ... mais je pense qu'il voulait plutôt faire qqch comme ça :
Code: Tout sélectionner
RewriteRule ^([^-]+)-([^-]+)-([^-]+)-([^-]+)-([^-]+)-([^-]+)-([^-]+)-([^-]+)/.*$ /index.php?$1=$2&$3=$4&$5=$6&$7=$8 [L]

(à adapter selon le nombre max. de variables)

KERIN
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 22 Mar 2005

Message le Lun Aoû 01, 2005 18:37

SuperPJ a écrit:Ca vient du fait que tu n'as pas mis de ^ et de $ dans ton expression régulière. Ce qui fait qu'Apache s'emmêle un peu les pinceaux


OK cool merci je vais tester ca demain au boulot

correiaj a écrit:Tu verras que tu peux tout faire en une seule règle:
RewriteRule var1-([a-z0-9]+)-var2-([a-z0-9]+)/.* http://tonsite/index.php?var1=$1&var2=$2 [L-NC]

Mon but est d'avoir une quantité indéfinie de variables alors... je pense pas que ca passe. Merci quand meme j'y avait pensé

Merci encore, j'espere que ca va marcher :)

Tchooo


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Lun Aoû 01, 2005 18:40

KERIN a écrit:Mon but est d'avoir une quantité indéfinie de variables

Ca se complique alors :P


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Re: URL Rewriting recursif en ajoutant du texte dans l'URL à

Message le Lun Aoû 01, 2005 18:48

Et pourquoi pas ...
Code: Tout sélectionner
RewriteEngine on
RewriteRule (.+)/([^/]+)\.html $1\.html
RewriteRule ([^/]+)-([^-/]+)-([^-/&]*)([^/-]*)\.html $1&$2=$3$4\.html [N]
RewriteRule ([^/-]+)-([^/-]*)([^/]*)\.html index2.php?$1=$2$3 [L]


Certains te diront que si ton nombre de paramètres dans un site web est indéterminé... soit tu fais du spamdexing soit c'est le site qui est mal conçu. :?


correiaj
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 25 Avr 2005

Message le Lun Aoû 01, 2005 20:40

et ben pour une url avec qtt de variable aléatoire:

RerwriteRule (/.*)([^-]+)-([^/]+)/.*html http://tonsite$1/index.php?$1=$2
RewrireRule (/.*)-([^-]+)-([^/]+)/index.php?(.*) http://tonsite$1/index.php?$4&$2=$3

Et voila

la premiere règle le cas où il y a une seule variable, et change le .html en index.php?machin
la seconde prend en compte toute les autres variables éventuelles


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Lun Aoû 01, 2005 23:20

Correiaj je n'ai pas trop compris ton expression régulière :?

Si j'ai bien compris Kerin, il voulait à partir de ...
h*tp://www.monsite.com/var1-val1-var2-val2/mon-texte-pour-compliquer.html
... obtenir :
h*tp://www.monsite.com/index.php?var1=val1&var2=val2

or ton expression régulière :
Code: Tout sélectionner
RewriteRule (/.*)([^-]+)-([^/]+)/.*html http://tonsite$1/index.php?$1=$2

... remplacera (sauf erreur) :
h*tp://www.monsite.com/var1-val1-var2-val2/mon-texte-pour-compliquer.html
par :
h*tp://www.monsite.com/var1-val1-var/index.php?/var1-val1-var=2

(le "(/.*)([^-]+)-([^/]+)/" coupe "/var1-val1-var2-val2/" en $1="/var1-val1-var" et $2="2")

En plus il me semble que tu as oublié d'echapper le ? de "index.php?(.*)" dans ta 2nde expression régulière :
Code: Tout sélectionner
RewriteRule (/.*)-([^-]+)-([^/]+)/index.php?(.*) http://tonsite$1/index.php?$4&$2=$3


correiaj
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 25 Avr 2005

Message le Mar Aoû 02, 2005 2:00

non la première règle remplace:
....varn-valn/nimportequoi.html en http://tonsite/.../index.php?var1=val1
et la seconde règle transforme
/var1-val1.../index.php?var1=val1 en http://tonsite/.../index.php?var1=val1&varn-1=valn-1

et cela jusqu´à que n-x=1
edit:
Pour corriger mes règles:

RerwriteRule (/.*)([^-]+)-([^/]+)/.*html http://tonsite$1/index.php?$1=$2
RewrireRule /([^-]+)-([^-/]+)([^/]*)/index.php?(.*) http://tonsite$3/index.php?$4&$1=$2

et le ? est retiré puis rajouté dans la seconde règle...


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Mar Aoû 02, 2005 2:31

Tu as testé cette règle ? ;) je ne suis pas sûr qu'elle fasse ce que tu dis ;)

De plus il y a une erreur dans ton expression régulière :
Code: Tout sélectionner
RewrireRule /([^-]+)-([^-/]+)([^/]*)/index.php?(.*) http://tonsite$3/index.php?$4&$1=$2

tu as oublié d'échapper le ? et le . : tu dois remplacer "index. php?(.*)" par "index\. php\?(.*)"
... sinon comme tu le sais il va considérer ? comme le quantifieur "0/1" et . comme "any character".

KERIN
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 22 Mar 2005

Message le Mar Aoû 02, 2005 6:47

SuperPJ a écrit:De plus il y a une erreur dans ton expression régulière :
Code: Tout sélectionner
RewrireRule /([^-]+)-([^-/]+)([^/]*)/index.php?(.*) http://tonsite$3/index.php?$4&$1=$2

tu as oublié d'échapper le ? et le . : tu dois remplacer "index. php?(.*)" par "index\. php\?(.*)"
... sinon comme tu le sais il va considérer ? comme le quantifieur "0/1" et . comme "any character".


Oui en effet il y a une erreur, j'ai oublié les backslash sur les . et ? mais de toute facon ma boucle se créait avant d'arriver à cette regle...

Je teste ca au boulo tout a l'heure et je vous dit ce qu'il en est :)

MERCI bcp pour votre aide et vos remarques à tous!! :lol: :lol: :D :D :lol: :lol:


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Mar Aoû 02, 2005 8:56

correiaj
ça fait deux mois que je te répète que tu peux pas réécrire index.php?truc=muche parce que tu ne peux pas accéder au query string dans ton .htaccess...

je parle dans le vide ? :lol:

KERIN
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 21
Inscription: 22 Mar 2005

Message le Mar Aoû 02, 2005 9:25

Je deviens fou...

voici les 3 regles que j'ai donc corigé d'après vos conseils:
Code: Tout sélectionner
RewriteRule ^([^/]+)/[^/]+\.html$ $1\.html
RewriteRule ^(.+)-([^-]+)-([^-&/]*)([^-/]*)\.html$ $1&$2=$3$4\.html [N]
RewriteRule ^([^-]+)-([^-]*)(.*)\.html$ index2\.php\?$1=$2$3 [L]


J'ai toujours le probleme qu'il m'ajoute des /les=clubs.html à la fin de mon URL, ce qui fait que une URL du type:
/lang-fr-category_id-21-action-view/les-clubs.html
est transformée en
/lang-fr-category_id-21-action-view.html
Puis
/lang-fr-category_id-21action&view/les=clubs.html
Puis
/lang-fr-category_id-21&action&view/les=clubs.html/les=clubs.html
puis encore
/lang-fr-category_id&21&action&view/les=clubs.html/les=clubs.html/les=clubs.html

pour finir en
index2.php?lang&fr&category_id&21&action&view/les=clubs.html/les=clubs.html/les=clubs.html/les=clubs.html/les=clubs.html.html

Ca me saoul un peu... je comprend vraiment pas ce bug qu'il m'ajoute des /les=clubs.html à chaque fois à la fin malgré les ^ et $ pour délimiter la chaine...


EDIT:
J'avais pas vu ta réponse Dj_Apx, "l'accès au query sting"? WTF is it? je vais peut être passer pour un con mais je comprend pas trop... :p


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Mar Aoû 02, 2005 10:19

Moi je te donne des règles qui marchent, tu m'écoutes pas, alors pas la peine de me parler, je boude :!:

URL Rewriting recursif en ajoutant du texte dans l'URL à la

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

  • Analyse des backlinks
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
  • Recherche de citations d'un site en texte brut
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités