problème de boucle et de redirection de diverses anciennes pages

Nouveau WRInaute
Salut à tous,

Je viens de refondre un site web, les anciennes url étaient non explicites, j'ai créé un site avec des urls propres.
J'avais prévu de faire des redirections 301 sur chaque ancienne page vers la nouvelle mais je me trouve face à deux soucis :

1 - j'ai une boucle de redirection à cause d'un autre paramètre, j'ai trouvé pourquoi mais pas sur que l'absence de la commande m'arrange.

2 - la redirection ne marche pas quoi qu'il arrive, même si je ne garde qu'un élément. je pense que la redirection 301 interfère avec la réécriture d'urls propres du site.

Voici mon .htaccess :



Code:
DirectoryIndex index.php

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .\.html$ index.php [L]

RewriteCond %{HTTP_HOST} nouveausiteavecdomaineidentique\.com [NC]

RewriteCond %{HTTP_HOST} !^www\.nouveausiteavecdomaineidentique\.com [NC]

RewriteRule ^(.*) http://nouveausiteavecdomaineidentique\.com/$1 [L,R=301]

ErrorDocument 404 /index.php


redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=2 http://www.nouveausiteavecdomaineidentique.com
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=789&theme=1 http://www.nouveausiteavecdomaineidentique.com/les-chambres-3-cles.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=789&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/les-chambres-3-cles.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=790&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/roulottes-hotelieres.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=799 http://www.nouveausiteavecdomaineidentique.com/roulottes-hotelieres.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=800 http://www.nouveausiteavecdomaineidentique.com/roulottes-gites.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=791&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/le-carre-detoiles.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=825&theme=1 http://www.nouveausiteavecdomaineidentique.com/le-ptit-buron-du-vacher.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=818&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/la-vie-au-domaine-de-la-chaux-de-revel.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=801&theme=1 http://www.nouveausiteavecdomaineidentique.com/pays-de-salers-15.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=793&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/piscine-et-sauna.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=803 http://www.nouveausiteavecdomaineidentique.com/piscine-et-sauna.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=822&theme=1 http://www.nouveausiteavecdomaineidentique.com/restaurations.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=811&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/la-kota-boutique.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=813&theme=1 http://www.nouveausiteavecdomaineidentique.com/autres-services.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=794&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/temoignages.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=816 http://www.nouveausiteavecdomaineidentique.com/temoignages.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=821&theme=1 http://www.nouveausiteavecdomaineidentique.com/reservation.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=798&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/liens-et-partenaires.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=796&theme=1 http://www.nouveausiteavecdomaineidentique.com/les-seminaires.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=797&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/sejours-a-theme.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=823&theme=1 http://www.nouveausiteavecdomaineidentique.com/contact.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=820&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/presse.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=817&theme=1 http://www.nouveausiteavecdomaineidentique.com/holidays-in-auvergne.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=819&theme=pe22e http://www.nouveausiteavecdomaineidentique.com/vacanze-in-auvergne.html
redirect 301 /anciensite/pages/viewer.asp?tp=d&id=10384&ID_ELEMENT=795 http://www.nouveausiteavecdomaineidentique.com/tarifs.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=824 http://www.nouveausiteavecdomaineidentique.com/pascal-montaz.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=808&theme=1 http://www.nouveausiteavecdomaineidentique.com/offrez-un-bon-cadeau.html
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=810&theme=1 http://www.nouveausiteavecdomaineidentique.com/sejours-a-theme.html

Est ce que ça pourrait être du au fait que l'ancienne URL ne comportait pas de www ?

Un énorme merci d'avance !
 
WRInaute impliqué
si le domaine à conserver est celui sans www, il faut enlever la ligne :
RewriteCond %{HTTP_HOST} nouveausiteavecdomaineidentique\.com [NC]

si le domaine à conserver est celui sans www, il ne faut pas mettre les www dans les lignes redirect 301.
 
Nouveau WRInaute
Merci de ta réponse mais tu dis dans les deux cas "sans www", j'en ai déduit que le premier était "avec www" mais de toute façon j'ai essayé les deux et rien ne fonctionne.

Quoiqu'il arrive de toute façon j'ai besoin du
RewriteRule ^(.*) http://nouveausiteavecdomaineidentique\.com/$1 [L,R=301]
qui renvoie les url sans www vers celui avec les www pour éviter le duplicate content
et si je le laisse j'ai une boucle infinie.

Comment inclure les deux ?

Sachant que ma redirection ne fonctionne jamais même si j'épure le site.

Merci à vous !
 
WRInaute accro
inverse l'ordre ....
Cette condition :
RewriteCond %{HTTP_HOST} !^www\.nouveausiteavecdomaineidentique\.com [NC]
renvoie textuellement "tout ce qui n'est pas ton nouveau site" sur la règle derrière "RewriteRule ..." qui elle est terminale ([L]). donc tu risque pas d'accéder aux règle derrières.
 
Nouveau WRInaute
Salut, merci de ton aide,

J'ai fait quelques changements car de toute façon le sans www ne redirigeait pas vers le www.
j'ai inversé l'ordre comme tu le proposes mais rien à faire, ça ne fonctionne pas :

Code:
SetEnv PHP_VER 5_TEST

redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=2 http://www.nouveausiteavecdomaineidentique.com
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=789&theme=1 http://www.nouveausiteavecdomaineidentique.com/les-chambres-3-cles.html

DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .\.html$ index.php [L]
RewriteCond %{HTTP_HOST} nouveausiteavecdomaineidentique\.com [NC]
RewriteCond %{HTTP_HOST} !^www\.nouveausiteavecdomaineidentique\.com [NC]
RewriteRule ^(.*) http://www.nouveausiteavecdomaineidentique\.com/$1 [L,R=301]

ErrorDocument 404 /index.php

j'ai viré la longue liste de 301 pour l'exemple, mais elle est bien présente dans mon fichier

Merci !

EDIT : je n'ai pas précisé que je n'ai plus de boucles, mais les redirections 301 ne fonctionnent pas du tout (les autres oui).

EDIT2 : J'ai trouvé pourquoi ça ne marche pas ! Mais je ne sais pas comment le résoudre.

si j'essaie d'attraper l'ancienne url suivante qui ne possédait pas les www : http://domainequinechangepas/anciensite/pages/viewer.asp?tp=ls&ID_ELEM ... 89&theme=1 ça me redirige vers http://www.domainequinechangepas/anciensite/pages/viewer.asp?tp=ls&ID_ ... 89&theme=1, ce qui est logique, il ajoute les www comme je lui ai demandé.
Maintenant, comment ne pas prendre seulement en compte cette dernière commande mais aussi toutes les autres ?
Merci !
 
WRInaute accro
Si tout fonctionne sauf les redirections en haut c'est que la syntaxe pour redirect est peut être mauvaise ....
http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect

Code:
redirect 301 /anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=2 http://www.nouveausiteavecdomaineidentique.com
ne devrait pas être par hasard (je comprend pas ton "anciensite" dans le pathWeb) :
Code:
redirect 301 /pages/viewer.asp?tp=ls&ID_ELEMENT=2 http://www.nouveausiteavecdomaineidentique.com
vérifie que le membre de gauche est bon.
la bonne syntaxe est redirect 301 pathWeb urlWeb je ne sais pas si les paramètres GET seront pris en compte en plus ...
 
WRInaute accro
zepokpok a dit:
Si tu veux avant les url étaient comme ça :
-http://domaineavecadresseidentique.com/anciensite/pages/viewer.asp?chainedetruc
Ok donc "anciensite" figurait dans le path
Essaye de rediriger en masse l'url "http://domaineavecadresseidentique.com/anciensite/pages/viewer.asp" vers une autre juste pour un test.
Code:
redirect 301 /anciensite/pages/viewer.asp http://www.domaineavecadresseidentique.com/une-url-propre.html
Je cherche a savoir si les paramètres en GET ne sont pas la cause du souci (ça ne m'étonnerait pas).
Si tel est le cas j'aurais peut être une solution souple a te proposer.
 
Nouveau WRInaute
hello !
bravo, c'est exactement ça ! (je me demande même pourquoi j'ai pas essayé avant... :()

J'ai fait un test avec viewer.asp plutot que viewer.asp?tp=ls&ID_ELEMENT=824 et ça marche...
Je suis preneur de ta combine oui si tu en as une !

Un grand merci une nouvelle fois, vraiment !
 
WRInaute accro
Bon ok ça c'est fait :D
Le truc c'est vue que tu as pas mal de paramètres en GET, je suppose que tu dois avoir une multitude de pages de redirection il serait donc pas mal de rediriger toutes ces pages en bloc vers un script php unique qui lui composerait la redirection en dur en fonction des paramètres reçus ...

pour faire cela "redirect 301 ..." n'est pas la bonne méthode personnellement j'utilise une réécriture sous condition à la place (j'ai donc une règle dans le htaccess par script et non par url) :

Code:
	# anciennes URLs  type viewer.asp
	RewriteCond %{REQUEST_URI}  ^(.*)viewer.asp.*
	RewriteRule ^(.*)viewer.asp(.*)$ /dossier/redirection.php [L,QSA]
Il y a surement moyen d'alléger un peut l'écriture j'ai pas fait de test.

le script "redirection.php" recevra donc les paramètres de la requête http (QSA > transmet à la redirection les paramètres d'URLs) il suffit de le concevoir pour réagir correctement exemple :

PHP:
<span class="syntaxdefault"> </span><span class="syntaxcomment">// lister toutes les URLs destination<br /></span><span class="syntaxdefault"> $newurl</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> $newurl</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">"nouvelle-url-1.html"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">......<br /></span><span class="syntaxdefault"> $newurl</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">101</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">"nouvelle-url-101.html"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> $newurl</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">102</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">"nouvelle-url-102.html"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> $newurl</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">105</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">"nouvelle-url-103.html"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">......<br /><br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment">// envoyer la redirection<br /></span><span class="syntaxdefault"> header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"HTTP/1.1 301 Moved Permanently"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Location: http://www.domaineavecadresseidentique.com/"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$newurl</span><span class="syntaxkeyword">[(int)</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'ID_ELEMENT'</span><span class="syntaxkeyword">]]);<br /></span><span class="syntaxdefault"> exit</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span>
 
Nouveau WRInaute
OK super, on avance, génial !

le lien avec redirection.php est bien fait par contre il ne m'attrape que la première partie, soit Location: http://www.domaineavecadresseidentique.com/ et me redirige vers cette portion uniquement.

je ne suis pas du tout calé en php mais il manque une boucle non ? Comment le code php sait que telle url d'avant "viewer.asp?truc" doit aller avec $newurl[0] ou $newurl[1], etc...

Il y a un truc qui m'échappe.

Code:
 <?php 

// lister toutes les URLs destination
 $newurl[0]="nouvellepage.html";

 // envoyer la redirection
 header("HTTP/1.1 301 Moved Permanently");
 header("Location: http://www.domaineavecadresseidentique.com/".$newurl[(int)$_GET['ID_ELEMENT']]);
 exit(); 
 ?>

Merci mille fois encore :D
 
WRInaute accro
zepokpok a dit:
le lien avec redirection.php est bien fait par contre il ne m'attrape que la première partie, soit Location: http://www.domaineavecadresseidentique.com/ et me redirige vers cette portion uniquement.
Je comprend pas bien est ce a dire que là tu redirige tout vers l'accueil uniquement ?

Comment le code php sait que telle url d'avant "viewer.asp?truc" doit aller avec $newurl[0] ou $newurl[1], etc...
Avec la partie en gras
header("Location: http://www.domaineavecadresseidentique.com/".$newurl[(int)$_GET['ID_ELEMENT']]);

$_GET['ID_ELEMENT'] est une variable qui est dans tes vieilles urls sous la forme :
-http://domainequinechangepas/anciensite/pages/viewer.asp?tp=ls&ID_ELEMENT=789&theme=1
donc théoriquement si tu envoie cette urls et que $newurl[789]="toto.html" la fonction header devrait te rediriger vers
-http://www.domaineavecadresseidentique.com/toto.htm

Si tu tombe toujours a l'accueil il conviens de faire un echo dans le script en désactivant la redirection (header location) afin d'afficher le paramètre pour voir si il est passé ou pas voir corrompu. (tu met juste un echo $_GET['ID_ELEMENT']; dans "redirection.php" afin de voir si tu as bien un int qui arrive au script)

(int) est la pour caster en intéger au cas ou un margoulin tape une connerie dans l'url ce qui produira 0 et renverra vers l'accueil.
$newurl[(int)$_GET['ID_ELEMENT']] est donc la variable tableau $newurl assortie d'un indice entier correspondant a une des urls initialisées en amont.
 
Nouveau WRInaute
ça marche !!

Merci mille fois encore !

Je n'avais pas saisi que je devais glisser l'ID de la page avec $newurl[id de la page à récupérer], je ne suis pas super à l'aise avec le code en général.

Merci encore, tu me résous un sacré souci (depuis de longs jours !).

je t'envoie mes coordonnées en MP, je serais ravi de te renvoyer l'ascenseur à l'occasion.
 
Discussions similaires
Haut