Pages profondes non redirigées (.htaccess RewriteRule)

WRInaute discret
Bonjour,

Les pages profondes du site pour lequel je viens de rediriger le domaine ne sont elles, pas redirigées.

Code:
RewriteCond %{HTTP_HOST}   ^www.vieuxdomaine.fr/ [NC]
RewriteRule ^(.*)         	http://www.nouveaudomaine.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST}   ^vieuxdomaine.fr/ [NC]
RewriteRule ^(.*)         	http://www.nouveaudomaine.com/$1 [L,R=301]

Une idée de ce qui peut empêcher http://www.vieuxdomaine.fr/toto d'être redirigée vers http://www.nouveaudomaine.com/toto ?

Merci d'avance pour votre aide !
 
WRInaute accro
Essaye d'enlever le / à ma fin du nom de domaine
Le [NC] ne sert à rien mais tu peux le laisser
le ^(.*) peut être remplacé par juste (.*)
Et ensuite tu perd les paramètres car tu n'as pas le flag QSA
Tu peux aussi ajouter des \ avant les .

Code:
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*)   http://www\.example\.com/$1  [QSA,R=301]
 
WRInaute discret
Merci pour cette réponse détaillée indigene. Il doit y avoir une subtilité quelque part, car ça ne fonctionne toujours pas. :( Possible qu'une autre règle présente dans le .htaccess écrase celle que tu m'as donnée ?
 
WRInaute discret
Si je supprime :
Code:
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
la redirection débouche sur une 404.
 
WRInaute accro
tu devrais avoir
Code:
# Le serveur doit suivre les liens symboliques :
# Options +FollowSymlinks
RewriteBase / 

# Activation du module de réécriture d'URL :
RewriteEngine on

et ensuite les 4 lignes de réécritures (pour le www et sans le www)
 
WRInaute discret
Code:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
#Redirection de l'ancien nom de domaine
RewriteCond %{HTTP_HOST} ^www\.vieuxdomaine\.fr
RewriteRule (.*)   http://www\.nouveaudomaine\.com/$1  [QSA,R=301]
RewriteCond %{HTTP_HOST} ^vieuxdomaine\.fr
RewriteRule (.*)   http://www\.nouveaudomaine\.com/$1  [QSA,R=301]
</IfModule>
# END WordPress

Seul le vieux domaine est redirigé ; pas les pages profondes. Arff.

Si j'enlève :

Code:
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Les pages profondes sont bien redirigées mais mènent à une 404.
 
WRInaute accro
quelle 404 ?

La 404 a lieu sur le nouveau domaine, il faut voir pourquoi ? Les pages de l'ancien domaine n'existent pas sur le nouveau domaine et ça donne une 404. Voir si l'url des pages après redirection est bien la bonne url. L'important c'était que les pages profondes soient redirigées et c'est bien ce qui est fait en enlevant les 4 lignes en trop.
Peut-être que sur le nouveau domaine tu as à nouveau des redirections qui ne fonctionnent pas. Il faut voir maintenant ce qu'il y a dans le .htaccess du nouveau domaine pour expliquer ce qui se passe.
 
WRInaute discret
Quand je laisse dans le .htaccess tout le code cité plus haut, les pages s'affichent toute correctement (200), sous un domaine ou l'autre, et seule la page d'accueil de l'ancien domaine est redirigée. Quand j'enlève le dernier extrait de code cité plus haut, effectivement les redirections fonctionnent au poil, par contre, comme tu l'as compris, erreur sur la page cible.

Je n'ai qu'un seul .htaccess. Tu me diras si c'est là que ça coince. J'ai fait pointer les deux domaines vers le même répertoire de mon hébergeur. Peut-être qu'il n'est pas recommandé de procéder ainsi. Désolé de n'avoir pensé à préciser la chose que tardivement.

Merci de me confirmer qu'il est préférable de maintenir le répertoire vers lequel pointait l'ancien domaine afin d'y avoir un .htaccess spécifique. ;)
 
WRInaute accro
Ah ben oui, c'est normal que ça ne marche pas

raison 1) la page page.html est redirigée vers page.html sur le nouveau domaine. Il faut donc que la page page.html existe sur le nouveau domaine ou bien que le nouveau domaine soit capable d'interpréter que page.html doit en fait appeler index.php qui doit afficher un contenu correspondant à page.html

raison 2) si le nouveau domaine pointe exactement vers le même répertoire que l'ancien domaine le nouveau domaine va donc utiliser le même .htaccess que l'ancien domaine et va donc effectuer les redirections indiquées dans ce .htaccess. Comme il n'y a que des règles concernant l'ancien domaine il n'y a aucune redirection de faite mais du coup on retombe sur la raison 1 : il n'y a aucune page qui s'appelle page.html ce qui produit une erreur 404

Le mieux à faire c'est de créer un sous-répertoire correspondant au nouveau domaine, d'y mettre l'ancien .htacces, faire pointer le nouveau domaine vers ce répertoire.
Dans l'ancien répertoire correspondant à l'ancien domaine, mettre le nouveau .htaccess avec les quelques lignes de redirection qui fonctionnent.
Ainsi, les deux domaines auront leur propre .htaccess
 
WRInaute discret
Yesss! J'avais pris les devant (quitte à rollbacker), et ça fonctionne ! Merci pour tes explications fournies, et tes conseils. Bon, je n'ai pas suivi celui du sous-répertoire, car j'ai déjà créé un répertoire au même niveau (wwwold au niveau de www), et comme il n'y a qu'un seul site sur cet espace FTP, je pense que ça ne craint pas un max.

Merci encore ! Et encore désolé de n'avoir pas précisé que les domaines pointaient au même endroit, je n'avais pas vu l'impact possible.
 
WRInaute accro
Oui, que ce soit un sous-répertoire ou un autre répertoire de même niveau c'est pareil. L'important est que ce ne soit pas le même répertoire. Et tant mieux si tu as compris le principe :D
 
Discussions similaires
Haut