Help: Problème de Redirection .htaccess suite erreur noms de pages

Nouveau WRInaute
Bonjour à tous,
Après avoir cherché dans le forum, je n'ai rien vu qui corresponde à mon problème, donc j'ouvre un nouveau sujet pour faire appel à vos bonnes âmes. Mes excuses si le sujet existe déjà ailleurs. :?


Quand j'ai codé mon site (HTML+CSS), j'ai fait l'erreur de débutant (ce que je suis :oops: ) de mettre des espaces dans les noms de mes pages web.

Je sais que c'est une belle bavure, mais j'étais seul et sans accès internet quand j'ai dû faire ce site, donc j'ai improvisé avec des livres pour apprendre, faute de mieux, et ils ne mentionnaient pas les problèmes liés aux caractères spéciaux. L'erreur est faite, et maintenant il faut que je répare. Je dépends professionnellement de ce site et je ne peux vraiment pas me permettre de perdre du ranking.

Avec l'expérience, et voulant corriger diverses erreurs (changement de nom de pages, redirection d'adresse sans "www" vers "www.", et redirection de Index.html vers la racine du site pour éviter les doublons) et remplacer les anciennes pages par des pages sans espaces dans les noms, j'ai tenté une redirection 301 dans le .htaccess.
Mais les noms des pages ayant des espaces entre les mots font que les noms des pages sont retranscrits soit avec des espaces soit avec des "%20", et font que soit le .htaccess n'est pas pris en compte quand je veux rediriger vers la nouvelle page (d'où une erreur 404), soit j'obtiens une erreur 500 (merci les "%"...).

Concrètement, mon htaccess donne ça :

RewriteEngine on

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

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ (/.*)?/Index.(htm|html|php|asp|shtml)
RewriteRule ^(.*)Index.(htm|html|php|asp|shtml)$ /$1 [R=301,L]

Redirect 301 /Ancien nom1.html http://www.monsite.com/Nouveau-nom1.html

Redirect 301 /Ancien nom2.html http://www.monsite.com/Nouveau-nom2.html

Redirect 301 /Ancien nom3.html http://www.monsite.com/Nouveau-nom3.html



Clairement le Redirect 301 ne fonctionne pas, ici, mais je ne comprends pas pourquoi. Quelle serait la bonne formulation ?

Où me suis-je encore planté, svp ? Avez-vous une autre solution pour remplacer mes pages aux noms "mal formulés" par des nouvelles aux noms correctement formulés sans perdre mon webranking, et sans que .htaccess ne plante tout le serveur, svp ? :cry:

Merci d'avance à ceux qui voudront bien me répondre.
 
Nouveau WRInaute
Bonjour,
Et merci beaucoup pour la réponse.
Ça marche. C'est cool.

A quoi correspondent/que signifient le "/one two three.exe", après le Redirect ? Pourquoi les guillements ?

Ce Redirect "xxxxxxxx" équivaut-il à un redirect 301 pour Google ? Dit autrement, est-ce je risque des pénalités de ranking avec ça ?

Donc, cela veut dire que je fais une ligne de code comme celle-ci dans le .htaccess pour chaque page existante à remplacer suite à la correction des espaces dans les noms de fichiers ?

Enfin, si je corrige de la sorte toutes les pages et garde ce .htaccess suffisamment longtemps, je suppose que le ranking des "nouvelles pages" va finir par se substituer aux anciennes, c'est bien ça ?

Merci d'avance.
 
WRInaute accro
Le / indique que tu pars de la racine du domaine

et pour le reste, oui, c'est à peu près ça

Perso je préfère coder les redirection de la sorte :

RewriteCond %{REQUEST_URI} ^/anciennepage.html$
RewriteRule ^anciennepage.html$ http://example.com/nouvellepage.html [R=301,L]

Ainsi je vois bien ce que je conditionne par la RewriteCond. ^ indique que ça commence par... et $ indique que ça se termine par ...
Et dans la RewriteRule je matérialise bien le type de redirection (301)

Mais ce n'est peut-être pas la meilleure solution pour coder un .htaccess. Enfin c'est ce que j'utilise, ça fonctionne et ça me convient parfaitement.
 
Nouveau WRInaute
Re-Bonjour.
Merci pour les précisions.

Pourtant il y a un problème: Dès que je mets plus d'une redirection (j'en ai 45 pour rediriger toutes les pages renommées), avec l'une ou l'autre des deux méthodes précédemment proposées, j'obtiens une erreur 404...!

Que se passe-t-il ?

Pour le cas où, j'ai essayé avec et sans ajout d'un / après ta RewriteRule, comme ci-après, mais pas mieux...

RewriteCond %{REQUEST_URI} ^/anciennepage.html$
RewriteRule ^anciennepage.html$ http://example.com/nouvellepage.html [R=301,L]

OU

RewriteCond %{REQUEST_URI} ^/anciennepage.html$
RewriteRule ^/anciennepage.html$ http://example.com/nouvellepage.html [R=301,L]

Je ne comprends plus rien. Pour être sûr de ne rien louper, dans tes modèles, je ne dois changer que anciennepage.html et example.com/nouvellepage.html par mon ancienne page et la nouvelle, respectivement, et ne rien changer dans {REQUEST_URI}, n'est-ce pas ?

Help. Et désolé d'être un boulet. :oops:
 
WRInaute accro
Bonjour,

Ces
Code:
RewriteCond %{REQUEST_URI} ^/anciennepage.html$
embrouillent tout.

Essaie avec seulement des lignes comme ceci:
Code:
RewriteRule ^anciennepage1.html$ http://example.com/nouvellepage1.html [R=301,L]
RewriteRule ^anciennepage2.html$ http://example.com/nouvellepage2.html [R=301,L]
RewriteRule ^anciennepage3.html$ http://example.com/nouvellepage3.html [R=301,L]
RewriteRule ^anciennepage\ avec\ des\ espaces.html$ http://example.com/nouvellepage4.html [R=301,L]
Les \ (backslash, suivi d'un espace), c'est quand il y a des espaces dans l'ancienne URL.

Jean-Luc
 
Nouveau WRInaute
Merci Jean-Luc,
Je teste tout de suite. :)

Une question de détail au passage:
Si l'équivalent d'un espace est un \ suivi d'un espace, quel est l'équivalent d'un apostrophe, stp ?

Merci.
 
Nouveau WRInaute
Bon, eh bien, ça ne marche pas non plus, Jean-Luc...

Merci quand même pour la suggestion. Au passage, j'en ai profité pour changer tous les noms de pages en remplaçant les espaces par des tirets, pour éviter de futurs soucis.

Toujours en erreur 404 quand on essaie de passer par le lien de l'ancienne page qu'affiche google lorsqu'on me cherche par mots clefs...

Pour l'instant, mon .htaccess a à peu près cette tête:

RewriteEngine on

RewriteCond %{HTTP-HOST} ^monsite.com [NC]
RewriteRule ^(.*)$ http://www.monsite.com/$1 [R=301,L]

RewriteCond %{THE-REQUEST} ^(GET|POST|HEAD)\ (/.*)?/Index.(htm|html|php|asp|shtml)
RewriteRule ^(.*)Index.(htm|html|php|asp|shtml)$ /$1 [R=301,L]

RewriteRule ^/Vos\ xxxx.html$ http://www.monsite.com/Votre-xxxx.html [R=301,L]

RewriteRule ^/Your\ xxxx.html$ http://www.monsite.com/Your-xxxx.html [R=301,L]

RewriteRule ^/Une\ xxx\ xxx.html$ http://www.monsite.com/Une-xxx-x-xxx.html [R=301,L]

RewriteRule ^/A\ xxx\ xx\ xxx.html$ http://www.monsite.com/A-xxx-xx-xxx.html [R=301,L]


etc... (40 autres redirections.)

Une idée de pourquoi ça ne marche pas, svp ?

Merci d'avance.
 
WRInaute accro
Puisque
Code:
RewriteRule ^/Vos\ xxxx.html$ http://www.monsite.com/Votre-xxxx.html [R=301,L]
ne marche pas, essaie
Code:
RewriteRule ^Vos\ xxxx.html$ http://www.monsite.com/Votre-xxxx.html [R=301,L]

Et si ça ne marche toujours pas, tu peux aussi essayer
Code:
RewriteRule "Vos xxxx.html" http://www.monsite.com/Votre-xxxx.html [R=301,L]
Jean-Luc
 
Nouveau WRInaute
Bonjour JeanLux,

Et merci pour les dernières suggestions.

La deuxième de tes dernières solutions a été la bonne (RewriteRule ^Vos\ xxxx.html$ http://www.monsite.com/Votre-xxxx.html [R=301,L]).

Curieux que les autres ne fonctionnent pas.

Problème réglé, donc c'est bon. Merci infiniment à toi et à Loubet et Indigene, qui ont aussi eu la gentillesse de m'aider. :wink:
 
Discussions similaires
Haut