[RESOLU] Problème de redirection permanente

WRInaute occasionnel
Salut,

J'ai un souci de redirect 301, et je ne trouve pas ma solution. Peut être pourrez vous m'aider.

Actuellement, j'ai une page qui a cette structure de base :
nouveau.php?lang=fr&position=0 (position correspond à la pagination)

Cette page est réécrite sous la forme :
nouveau_fr,0.html

Pour cela j'utilise la règle suivante :
Code:
RewriteRule ^nouveau_([a-z]+),([0-9]+)\.html$ nouveau.php?lang=$1&position=$2 [L]

Jusque là, tout va bien. Pour y parvenir, le lien pointe sur l'adresse nouveau_fr,0.html et non sur l'adresse nouveau.php?lang=fr&position=0
C'est une règle classique de réécriture.

Par contre, dans le cadre de la refonte du site, je veux modifier l'URL de cette page.

Je veux donc passer du format nouveau_fr,0.html au format /fr/0/nouveau

Le souci, c'est que je peux faire pointer les liens à l'avenir sur le nouveau format /fr/0/nouveau et écrire la règle comme la première à partir de nouveau.php?lang=fr&position=0

Mais ce que je veux, c'est que si quelqu'un arrive sur l'ancienne page nouveau_fr,0.html (depuis un moteur), celle ci soit transformée en /fr/0/nouveau sans que l'accès se fasse à travers un lien au nouveau format.

Il existe la règle redirect permanent, mais je n'arrive pas à l'appliquer avec des variables, puisque les variables changent.

J'espère que je suis clair. Merci de votre aide.
 
Nouveau WRInaute
as tu essayé ceci ?
suis pas sur de la syntaxe correcte mais l'idée est de rediriger l'ancienne syntaxe vers la nouvelle puis la nouvelle vers l'url reel

^nouveau_([a-z]+),([0-9]+)\.html$ /$1/$2/nouveau [R=310,L]


^([a-z]+)/([0-9]+)/nouveau$ nouveau.php?lang=$1&position=$2 [L]


dit moi si ça tourne...
 
WRInaute occasionnel
Salut,

Merci de la piste, mais ça ne fonctionne pas. En fait, il me faudrait réécrire deux règles successives, mais que la seconde, sous forme R301 force l'URL

Ton idée semblait bonne, mais ça va pas. L'ancienne adresse (celle rewritée) reste accessible, mais elle n'est pas réécrite vers la nouvelle

forcément, depuis les moteurs, les gens vont arriver sur les anciennes URL. Les liens du site seront à jour, mais si je prends pas cette précaution, je vais foutre tout mon référencement en l'air.

Merci de votre aide, si quelqu'un sait comment faire ça, je lui serait éternellement reconnaissant :)

PS : c'est un dédié chez OVH
 
Nouveau WRInaute
As tu essayé d'inverser les 2 regles ?



^([a-z]+)/([0-9]+)/nouveau$ nouveau.php?lang=$1&position=$2 [L]

^nouveau_([a-z]+),([0-9]+)\.html$ /$1/$2/nouveau [R=310,L]
 
WRInaute occasionnel
Ouais, j'ai inversé, bien sur, tenté des variantes... et j'ai essayé aussi avec redirect permanent mais rien n'y fait.

Je n'arrive pas à rediriger et surtout forcer la réécriture lorsque l'on pointe sur l'ancien lien, et c'est gênant, parce que la structure des URL va changer pas mal.
 
Nouveau WRInaute
Je viens de tester cela fonctionne parfaitement chez moi avec ce code :
RewriteRule ^([a-z]+)/([0-9]+)/nouveau$ nouveau.php?lang=$1&position=$2 [L]

RewriteRule ^nouveau_([a-z]+),([0-9]+)\.html$ /$1/$2/nouveau [R=301]

à savoir que quand on tape l'url : nouveau_fr,0.html cela renvoie directement à l'url : /fr/0/nouveau
qui elle, appelle bien vers : nouveau.php?lang=fr&position=0

tu doit avoir une erreur autre part.
 
WRInaute occasionnel
Ecoute, je viens de refaire le test, tout fonctionne parfaitement.

Merci beaucoup de ton aide.

J'ai supprimé le .htaccess du serveur et l'ai rechargé via mon FTP. Peut être qu'il n'arrivait pas à l'écraser...

En tout cas, merci encore, parce que même sans ce souci de FTP, j'étais parti sur la mauvaise piste.

C'est sympa de m'avoir aidé, j'étais scotché là dessus.

Pour ceux qui ont pas compris, voici la solution de r._xmouse

Code:
#On fait une règle nouvelle avec le nouveau format souhaité à partir de l'URL Brute qui contient les paramètres en $_GET

RewriteRule ^([a-z]+)/([0-9]+)/nouveau$ nouveau.php?lang=$1&position=$2 [L]

#Un fois le nouveau format défini, on force la redirection 301 de l'ancien format de réécriture vers le nouveau pour les moteurs entre autre

RewriteRule ^nouveau_([a-z]+),([0-9]+)\.html$ /$1/$2/nouveau [R=301]
 
Discussions similaires
Haut