Redirection d'URL dynamiques

Nouveau WRInaute
Bonjour à tous,

Je débute en réécriture d'URL et j'avoue ne pas trouver de solution à mon problème malgré la lecture des posts épinglés et de diverses sources.

J'ai des URL à rediriger qui ressemblent à ça : /recette/gateau?recetteid=1337

vers un nouveau site passé en https dont l'url est comme ceci : /recette/gateau.html

La simple Redirect 301 ne fonctionne pas, j'ai donc tenté d'appliquer ce code dans le htaccess, sans succès.
Code:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^recetteID=([0-9]+)$ [NC]
RewriteRule ^/recette/gateau?recipeId=1337$ https://www.example.com/recette/gateau.html [R=301,L,QSD]
Comment faire pour rediriger correctement ces url dynamiques ?

Merci de votre aide !
 
WRInaute impliqué
Dans /recette/gateau?recetteid=1337, gateau est unique ou commun à plusieurs recettes ?

En clair, tu as des urls comme :
/recette/gateau?recetteid=1337
/recette/charlotte?recetteid=1338
/recette/framboisier?recetteid=1339

ou
/recette/gateau?recetteid=1337
/recette/gateau?recetteid=1338
/recette/gateau?recetteid=1339

?

Au passage, si tu veux simplifier tes URL, le suffixe ".html" me semble plutôt malvenu.
 
WRInaute occasionnel
un debut tout début de tutoriel
Donc on prend un testeur d'url rewritting.
Il y en a plusieurs sur le web, google est ton ami et les trouvera
Par exemple : https://htaccess.madewithlove.be/

On lit la documentation d'apache, si on parle d'apache (dans ce cas) ou la doc de IIS (c'est similaire, dès qu'on a installé le module d'url rewritting, et mieux fait que sur apache parce qu'on peut tester les règles d'url rewritting directement dans l'interface d'IIS qui est vraiment mieux que VI)

Donc revenons a notre tutoriel, au passage tous les ânes qui font des turoriels oublient qu'il n'y a pas de loin et pas qu'apache sur le web

Donc on lit la doc et on voit :

RewriteRule URL_a_réécrire URL_réécrite [drapeau]

Dans le testeur, on va donc mettre
RewriteRule meuh.html lavache.html

et tester l'url (dans l'espoir que meuh.html devienne la vache.html)
http://www.toto.com/meuh.html

Ca ne fonctionne pas...

Il faut marquer le début de premier paramètre avec ^ et fin de premier paramètre avec $
(ok c'est dévbile, mais apache et ce style de tru, ca date des années 75 et il avait 127 (pas 255) caractères disponibles)

Donc on écrit
RewriteRule ^meuh.htm$ lavache.html


Magie !! ca fonctionne : http://www.toto.com/meuh.html se transforme en http://www.toto.com/meuh.html

Osons deux règles de suite
RewriteRule ^meuh.html$ lavache.html
RewriteRule ^meuh.html$ ledernierEstPrioritaire.html

Ca marche http://www.toto.com/meuh.html se transforme en http://www.toto.com/ledernierEstPrioritaire.html

----------------
Je vois déjà une première erreur de tous les copier colleur du coin qui ne lisent pas la doc

(Par chance si on apprend on topdown le réseau, http c'est en haut, donc en premier dans la liste des connaissances et donc en copient collant on s'en sort. Si par contre on apprends en bottomup le réseau, pas de bol http , il faut se farcir tout les cours réseaux avant. )

RewriteRule ^meuh.html$ lavache.html
RewriteRule ^lavache.html$ ledernierEstPrioritaire.html

= ils ont pensé que la première ligne modifiait la requête et donc dès la deuxième ligne on avait déjà transformé la requête. Pas de bol, ce n'est pas comme dans un lanage informatique ou on aurait modifié le contenu de la varaible
----------------

Donc, il existe les drapeux qui permettent de faire plain de truc, des condistions ou, non, if else...

Dans notre cas, le drapeua [L] qui signifie Last
Si on ne veux pas que la deuxième redirection bousille la première par exemple :

RewriteRule ^meuh.html$ lavache.html [L]
RewriteRule ^meuh.html$ ledernierEstPrioritaire.html

Le l va faire "sortir" l'url rewritting en l'état. Donc dans notre cas à l'url lavache.html

Effet de bord pour les burnes qui copient ccollent des règles les unes derrières les autres.
La requête ressort, souvent est réappelée avec une url intermédiaire... Des conditions ne sont pas appelées......

......................
On a juste vu le tout début...
 
Nouveau WRInaute
Dans /recette/gateau?recetteid=1337, gateau est unique ou commun à plusieurs recettes ?

En clair, tu as des urls comme :
/recette/gateau?recetteid=1337
/recette/charlotte?recetteid=1338
/recette/framboisier?recetteid=1339

ou
/recette/gateau?recetteid=1337
/recette/gateau?recetteid=1338
/recette/gateau?recetteid=1339

?

Au passage, si tu veux simplifier tes URL, le suffixe ".html" me semble plutôt malvenu.

Mes URL ressemblent à :

/recette/gateau?recetteid=1337
/recette/charlotte?recetteid=1338
/recette/framboisier?recetteid=1339

J'ai un paquet d'url unique que je souhaite rediriger mais celle-ci contiennent un "?" que je n'arrive pas à gérer pour mes redirections. Pour la simplification d'URL je suis pas contre mais mon principale souci est vraiment la redirection de ces pages dynamiques pour le moment.

J'ai l'impression que ce que je souhaite faire est assez simple et pourtant je ne trouve pas de solution à mon problème.

@rollback Merci pour le tuto ça ne fait jamais de mal, et le testeur de htaccess qui parait fort utile dans mon cas. Ici le testeur me dit que ma règle
RewriteCond %{QUERY_STRING} ^recetteID=([0-9]+)$ [NC] est incorrecte.

J'ai corrigé mon code qui contenait une erreur, voici la dernière version (qui ne fonctionne toujours pas :() :
RewriteEngine On
RewriteCond %{QUERY_STRING} ^recetteID=([0-9]+)$ [NC]
RewriteRule ^/recette/gateau?recetteid=1337$ https://www.example.com/recette/gateau.html [R=301,L,QSD]

Si vous avez une idée... Merci !
 
WRInaute occasionnel
alors continuons un peu le tuto.
En dehors de tous les cas alambiqués ou on peut rediriger sur de nombreux critères
voir des exemples bizarroïdes ici : http://phpsources.org/codes/php/htaccess/index?ressources-symboles.html

on s"intéressera aux expressions régulières pour reformater le texte de la requête.
Ici à nouveau, rien de vraiment complexe si on reste dans des expressions qui ne vont pas se modifier elle mêmes ... En gros, pas de truc récursifs sinon on va s'embrouiller.

Exactement comme pour le caractère d"but et fin de chaine, c'est surtout l'utilisation foireuse de 127 cactères qui se court après qui va générer un beau merdier alors que c'est simple.

Déjà, comme on va utiliser des caractères pour repérer des zones et que ces caractères peuvent aussi faire partie du texte. On va devoir comme les "échaper".
Le caractère qui emmerde en gros c'est le . on va écrire \.

donc admettons qu'on cherche : index.php on aura ^index\.php$
On a vu dans le tuto partie 1 ^pour début de chaine et $ pour fin de chaine
Déjà si on pas lu un tuto (le mien = le meilleur des meilleurs des meilleurs) on est mal barré

Ensuite, en restant simple, on va pouvoir chercher des zones à l'intérieur de la chaine.
Des zones qui peuvent prendre plusieurs valeurs.
On marque ces zones avec des [ ]
Par exemple, 1 seul chiffre qui va donc de 0 à 9 puis qu'on est en 127 caractères
index0.php
index1.php
index2.php
index3.php
....
index9.php

pour attraper ces urls on va écrire ^index[0-9]\.php$

ici entent en scène les copier colleurs qui ont la flemme de lire une doc, qui recopient des tutos a tord et a travers avec au final de la daube

Bref : in utile de s'étendre sur les multiples règles que l'on peut écrire dans ces [ ] - ca va du simple au très compliqué, et aussi plusieurs syntaxes peuvent décrie à le même motif.
[0123456789] ...

à ce stade, différents essais et lectures sur le web, on doit déjà être en mesure de détecter (tester avec les outils - cf tuto partie 1) nos URLs et par exemple simple ment pour l'instant toutes les rediriger vers une même page.

Pas la peine d"écrire des trucs tout de suite sur les redirections finales, il faut déjà détecter les urls/requêtes que l'on veut rediriger !!!!!



vos détections fonctionnent, passer aus redirections - next tuto










 
Dernière édition:
WRInaute occasionnel
faisons simple
on peut attraper dans notre détection (voir tuto précédent) des morceaux, et utiliser ces morceaux la parie url redirigée (voir tuto 1)

Magnifique !!!!!!!!

à nouveau, rien de compliqué (si au reste au niveau des burnes SEO) , juste de la syntaxe poubelle des années PERL

Dans la partie Url à réécrire (voir tuto1), qu'on a bricolé dans le tuto 2, c'est à dire par exemple
^index[0-9]\.php$ qui nous a permis de repérer les url de la forme index0.php index2.php ....
on peut metrre des zones entre () ce qui a pour effet de créer des variables qui vont contenir le contenu de la zone.
Et ces variables, pour bien embrouiller le tout, elles vont s'appeler : $1 pour la première. $2 pour la deuxième ... On va pouvoir les utiliser dans l'URL/La requête réécrite (voir tuto1)

Prenons un exemple débile pour bien comprendre. Imaginons que je veuille extraire le texte nde de ma requête à modifier pour la placer dans la nouvelle URL requête
Je vais écrire : ^i(nde)x[0-9]\.php$
et dans ma nouvelle url/requête $1 vaudra nde

!!!! mon exemple est simple, mais on peut faire des truc très foireux avec des parenthèses de parenthèses...
On peut avoir plusieurs paranthèses, et c'est l'ordre de "décompilation"de lexpression régulière qui va les créer .

En gros dans 99.99 pourcent des cas , on s'en sort avec de l'utl rewritting simple sans avoir besoin d'aller dans les arcanes des expressions régulières et des astuces de l'url rewritting
 
WRInaute occasionnel
Grace à mon superbe tutoriel
on entre index9.php
on passe la règle
RewriteRule ^i(nde)(x)([0-9])\.php$ meuh$1$1$2$2$1$1.htm$3l

Url/ requête de sortie ????

Voila vous avec le niveau 1 en url rewritting

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
 
WRInaute occasionnel
vous n'avez toujours rien compris, c'est normal, surtout si vous êtes SEO
donc d'un coté on a la requête à modifier
exemple : index9.php
La première chose est qu'il faut la repérer par un ^au début et un $ à la fin
On obtient
^index9\.php$

le \. est la parce qu'on ne peut pas écrire . c'est interdit
(première erreur des newbies)

Si on voulait rediriger juste cette URL, ca suffit
Mais admettons qu'on veuille rediriger index0.php , index1.php..... index9.php

C'est lourd d'écrire 9 règles de redirections (quoi que)
donc on peut écrire :
^index[0-9]\.php$

------------> on a la détections des requêtes qu'on voulait

Pour notre nouvelle requête transformée, on a le droit de prendre des morceaux de la requête d'entrée
Pour repérer ces morceaux (on appelle ces morceaux des motifs) on les place entre ()
Il vont s'appeler $1 $2 $3 .... $9 (c'est limité à 9)

Admettons que je veuille une nouvelel requête de la forme ix9.html
Je vais prendre le i et le x9
Donc
^(i)nde(x[0-9])\.php$ et je crée $1$2.html

au final j'aurai

RewriteRule ^(i)nde(x[0-9])\.php$ $1$2.html

Si je rentre index3.html je ressors avec ix3.html


$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$
La fin de toutes les questions d'url rewritting !!!!!!!!!!!!!!!!!
$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$
 
WRInaute impliqué
Nouveau WRInaute
Merci à vous deux pour vos réponses ! J'ai pu trouver réponse à mon problème.

@colonies : Ton code n'est pas exactement ce que je cherchais car je n'avais pas assez bien précisé les détails de mes URL... J'ai quand même pu retomber sur mes pattes en l'adaptant. Les nouvelles URL contiennent un ID unique qui empêche de créer une règle pour toutes ces URL de recette.

Pour ceux que ça pourrait aider : l'erreur de mon code initiale qui me bloquait était que je reprenais le paramètre dans l'URL de la ligne RewriteRule

Voici le code normalement fonctionnel pour mon cas :
RewriteCond %{QUERY_STRING} ^recetteID=([0-9]+)$ [NC]
RewriteRule ^recette/gateau$ https://www.example.com/recette/45-gateau.html [R=301,L,QSD]
 
WRInaute occasionnel
moi j'aime bien l'url rewritting
https://www.webrankinfo.com/forum/t/redirection-durl-dynamiques.194969/#post-1586278

j'aime bien aussi voir que 100% des copier colleur font toujours la même erreur (pourtant je l'ai écrit)

= ils ont pensé que la première ligne modifiait la requête et donc dès la deuxième ligne on avait déjà transformé la requête. Pas de bol, ce n'est pas comme dans un langage informatique ou on aurait modifié le contenu d'une variable

C'est un autre sujet, mais je vois aussi souvent les web agency 360 full digital envoyer fièrement le code analytics de google qu'ils ont copier coller. Limite des fois on devrait placer 10 fois le même code avec des identifiants diférents...
 
Discussions similaires
Haut