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

- Messages: 21
- Inscription: 22 Mar 2005
URL Rewriting recursif en ajoutant du texte dans l'URL Ã la
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é

- Messages: 1110
- Inscription: 25 Avr 2005
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]
-

SuperPJ - WRInaute impliqué

- Messages: 513
- Inscription: 15 Jan 2005
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
- 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

- Messages: 21
- Inscription: 22 Mar 2005
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
-

Patrice A. - WRInaute passionné

- Messages: 2415
- Inscription: 11 Fév 2005
Re: URL Rewriting recursif en ajoutant du texte dans l'URL Ã
- 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é

- Messages: 1110
- Inscription: 25 Avr 2005
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é

- Messages: 513
- Inscription: 15 Jan 2005
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é

- Messages: 1110
- Inscription: 25 Avr 2005
....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é

- Messages: 513
- Inscription: 15 Jan 2005
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

- Messages: 21
- Inscription: 22 Mar 2005
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!!
-

Patrice A. - WRInaute passionné

- Messages: 2415
- Inscription: 11 Fév 2005
ç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 ?
- KERIN
- Nouveau WRInaute

- Messages: 21
- Inscription: 22 Mar 2005
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é

- Messages: 2415
- Inscription: 11 Fév 2005
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 :
- URL rewriting url avec parametres vers autre url avec param
- Pb d'URL rewriting recursif
- Gestion de la page par défaut, multingue, url Rewriting, url friendly
- URL Rewriting... Mais la nouvelle URL apparait dans la barre d'adresse
- url rewriting: modification d'un dossier dans une url + l'extension
- après url rewriting, éviter doublon avec url par variable
- URL rewriting et redirect permanant des URL réécrites
- url rewriting avec url ssl (virtuemart et SH404SEF)
- Anciennes URL dans Google après url rewriting
- Redirection url suite à mise en place url rewriting.
- Tutoriel URL Rewriting
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Optimiser le référencement d'un forum phpBB : réécriture d'URL
- l'URL Rewriting expliqué aux débutants
- 3ème partie de l'article .htaccess : les réécritures conditionnelles
- L'URL Rewriting expliqué aux débutants
- Guide d'optimisation des redirections pour le référencement
- Bientôt des URL personnalisées sur Google+ (vanity URL)
Consultez la description détaillée des produits ou services de Google suivants : Google goo.gl, Le raccourcisseur d'URL youtu.be, Google AdWords API, Google Local Business Ads
- 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
