Conflit de rewriting ?

Nouveau WRInaute
Bonjour,
J'avais placé avec succès un rewriting pour obliger les www devant mon nom de domaine (hébergé chez OVH en mutualisé):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.nomdedomaine\.fr [NC]
RewriteRule (.*) h**p://www.nomdedomaine.fr/$1 [QSA,R=301,L]

Aujourd'hui j'aurais besoin d'un rewriting suplémentaire pour remplacer automatiquement une page dans un sous répertoire. J'ai essayé sans succès une instruction du type
RewriteEngine On
RewriteRule ^ancienne\.htm$ nouvelle\.htm [R=301,L]

j'arrive à une erreur 404 avec une adresse du type h**p://www.nomdedomaine.fr/home/xxxxx/www/sousrepertoire/nouvelle.htm

J'ai trois questions :
1- Y-aurait-il incompatibilité entre les deux règles?

2- faut-il que cette nouvelle instruction soit rajoutée dans le .htaccess de la racine (avec le sous-répertoire):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.nomdedomaine\.fr [NC]
RewriteRule (.*) h**p://www.nomdedomaine.fr/$1 [QSA,R=301,L]
RewriteRule ^sousrepertoire/ancienne\.htm$ sousrepertoire/nouvelle\.htm [R=301,L]

3- un plus doué que moi (c'est pas difficile) a-t-il vu où je fais l'erreur ?
Merci par avance
 
Nouveau WRInaute
Le nom de domaine dans la rewrite rule pour redirection 301

RewriteRule ^ancienne\.htm$ nouvelle\.htm [R=301,L]

Il me semble que dans le cas d'une redirection 301 il te faut écrire dans la deuxième partie de ta rewrite Rule le nom de domaine.

Essaye donc
RewriteRule ^ancienne\.htm$ h**p://www.nomdedomaine.com/nouvelle\.htm [R=301,L]

A notament utiliser si tu veux récupérer le référencement des pages que tu as renommées et ainsi éviter le 404.
 
Nouveau WRInaute
Je viens de faire l'essai en plaçant l'instruction comme indiquée dans le .htaccess de la racine, mais la redirection ne se fait pas. Je reste sur l'ancienne page ...
 
Nouveau WRInaute
Essaye en plaçant la rewrite rule avant ton rewrite cond.

De plus il me semble qu'il est inutile de protéger tes points dans la seconde section de ton rewriteRule.

Code:
RewriteEngine On
RewriteRule ^sousrepertoire/ancienne\.htm$ h**p://www.nomdedomaine.fr/sousrepertoire/nouvelle.htm [R=301,L] 

RewriteCond %{HTTP_HOST} !^www\.nomdedomaine\.fr [NC]
RewriteRule (.*) h**p://www.nomdedomaine.fr/$1 [QSA,R=301,L]
 
Nouveau WRInaute
C'est étrange lorsque tu a mis
Code:
RewriteEngine On
RewriteRule ^ancienne\.htm$ nouvelle\.htm [R=301,L]

La redirection se faisait mais avec une erreur, il récupérait l'architecture des dossier du serveur /home/www....

Pour corriger ce problème je penses qu'il faut mettre dans le sous répertoire

Code:
RewriteEngine On
RewriteRule ancienne\.htm h**p://www.nomdedomaine.fr/sousrep/nouvelle\.htm [R=301,L]

Avec la solution que je t'avais proposé j'intégrais dans le .htaccess racine la ligne
Code:
RewriteRule sousrepertoire/ancienne\.htm h**p://www.nomdedomanie.fr/sousrepertoire/nouvelle.htm [R=301,L]

S'il ne matche pas la ligne c'est que l'expression régulière est mal formée, car la rewritecond n'intervient qu'après ta redirection. Le [L] empêchant sa lecture elle ne devrait pas interagir.
 
Nouveau WRInaute
C'est bon ça marche en mettant dans le sous-répertoire

RewriteEngine On
RewriteRule ancienne\.htm h**p://www.nomdedomaine.fr/sousrep/nouvelle\.htm [R=301,L]

Merci beaucoup de ton aide.
 
Discussions similaires
Haut