[Résolu] Conflit dans les régles de réécriture.

WRInaute discret
Bonsoir,

Je me bat avec mon .htaccess et je crois que pour aujourd'hui, il a gagné, car je m'y perd complètement.

Je ne vous explique pas tous, ce serait compliqué, mais en repartant de 0, voici le premier conflit que je rencontre.

J'ai deux règles de réécriture url-rewritting qui fonctionnent bien quand elles sont seules, mais lorsque j'ajoute des redirections 301 rien ne va plus.

Voici le code qui fonctionne :
Code:
#--------------------------------------------------
# Répertoire : /index/
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

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

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

RewriteRule ^(.*)-([0-9]*)-(.*)-([0-9]{2})\.html$ /region.php?titreurl=$1&id_parametre=$2&region=$3&code_region=$4 [L]

RewriteRule ^([a-z]*-[a-z]*)-([0-9]{2})\.html$ /index.php?titreurl=$1&id_parametre=$2 [L]

Donc ça, ça marche.
Si je rajoute deux ligne [R=301] pour rediriger index.php et index.html vers la racine du site, comme ci-dessous. La deuxième règle ne fonctionne plus.
La page s'affiche correctement, mais l'url n'est pas réécrite dans la barre d'adresse du navigateur.

Code:
#--------------------------------------------------
# Répertoire : /index/
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

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

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

RewriteRule ^([a-z-]*)-([a-z-]*{2})-([0-9]{2})-([0-9]{2})\.html$ /region.php?titreurl=$1&region=$2&id_parametre=$3&code_region=$4 [L]
RewriteRule ^([a-z-]*)-([0-9]{2})\.html$ /index.php?titreurl=$1&id_parametre=$2 [L]

RewriteRule index.html  / [R=301,L]
RewriteRule index.php  / [R=301,L]

J'ai plusieurs R=301 à faire mais déjà la, en ajoutant index.html et index.php, ça plante.

Quelqu'un voit-il se qui ne va pas?

J'ai essayé de les mettre au début et a la fin mais j'ai le même résultats. La deuxième règles de réécriture plante.

En espérant avoir réussi a me faire comprendre.

Merci d'avance.
 
WRInaute passionné
Tu as essayé de mettre

RewriteRule index.html / [R=301,L]
RewriteRule index.php / [R=301,L]

Avant les 2 règles précédentes ?

(tu fais un rewrite vers l'index, et l'index tu l'envoi vers "/" donc au final, tu renvois t'as 2eme règles vers "/")
 
WRInaute discret
Tu as essayé de mettre

RewriteRule index.html / [R=301,L]
RewriteRule index.php / [R=301,L]

Avant les 2 règles précédentes ?

Oui, avant ou après c'est le même résultat.

(tu fais un rewrite vers l'index, et l'index tu l'envoi vers "/" donc au final, tu renvois t'as 2eme règles vers "/")

Oui, ma page index qui est en php créé toutes mes pages principale à partir d'un id. Avec un isset si la variable id n'existe pas c'est que c'est la page d'accueil, sinon je construit ma page avec les paramètres liés à l'id.

[L] est pourtant censé arrêter la lecture des règles, donc en les mettant au début ça devrait marcher. j'ai l'impression que chez moi, ça ne marche pas.
 
WRInaute accro
Code:
RewriteRule ^index\.html$  http://www.tonsite.ext/  [R=301,L]

ou

Code:
RewriteRule ^index\.html$  /  [R=301,L]
 
WRInaute discret
Code:
RewriteRule ^index\.html$ http://www.tonsite.ext/ [R=301,L]


ou

Code:
RewriteRule ^index\.html$ / [R=301,L]

Merci KOogar J'ai mis le code ci-dessous avant et après mes règles de réécriture. Dans les deux cas, j'ai toujours le même problème. La deuxième ligne de réécriture ne s'affiche pas réécrite dans la barre du navigateur.
Code:
RewriteRule ^index\.html$  /  [R=301,L]
RewriteRule ^index\.php$  /  [R=301,L]
 
WRInaute passionné
yann123 a dit:
[L] est pourtant censé arrêter la lecture des règles, donc en les mettant au début ça devrait marcher. j'ai l'impression que chez moi, ça ne marche pas.

Je sais bien, mais j'ai déjà eu des problèmes sur certains serveurs avec ce genre de chose.
 
WRInaute discret
J'ai résolu mon problème en créant une nouvelle page "page.php".
Ma page index ne me sert que pour ma page d'accueil et ma page " page.php" pour les autres pages principale. Du coup plus de conflit.
 
Nouveau WRInaute
Reouverture : PB d'affichage dans la barre d'adresse

Je me permet de répondre à un topic résolu car c'est celui que j'ai trouvé qui est le plus proche de mon probleme, je m'explique :

J'ai mis en place une regle de réecriture qui fonctionnait trés bien, seulement je me suis rendu compte que google n'indexait pas les pages comme une redirection 301, j'ai donc voulu rajouter ce parametre à la fin de la regle de réecriture, une fois rajouté la regle fonctionne toujours, seulement j'ai mon adresse non réecrite qui s'affiche dans la barre d'adresse du navigateur... Voici le code :

La regle qui fonctionnait bien mais qui ne m'indexait pas mes nouvelles pages auprés de google.
Code:
RewriteRule ^(.)*-([0-9]+)-([0-9]+)\.html$ /agences.php?ag=$2&cat=$3 [L]


La nouvelle regle :
Code:
RewriteRule ^(.)*-([0-9]+)-([0-9]+)\.html$ /agences.php?ag=$2&cat=$3 [L,R=301]
ou
Code:
RewriteRule ^(.)*-([0-9]+)-([0-9]+)\.html$ /agences.php?ag=$2&cat=$3 [R=301,L]

Cette regle la marche également mais par contre dans la barre d'adresse j'ai par exemple :
(quand je dis qu'elle marche, le lien generé m'affiche bien la bonne page, mais pas dan l'url)
Code:
http://www.url.fr/agences.php?ag=1&cat=1
au lieu de :
Code:
http://www.url.fr/agence-region-chartres-quotidien-1-2.html
Merci pour vos réponses :)
 
WRInaute passionné
Je comprend pas pourquoi tu as changé en rajoutant R=301

R=301 signifie redirection 301.

Donc ça fait une redirection vers la deuxième partie de ton rewrite. C'est à dire "agences.php?ag=1&cat=1 " donc forcement, ça l'affiche dans la barre d'adresse.

Par conséquent, ta première réécriture était la bonne.

Le soucis devait venir d'ailleurs quand Google ne t'indexait pas tes nouvelles pages avec le premier rewrite.
 
WRInaute discret
Pourquoi veux tu mettre R=301 après ta règle ?

Je pense que ça n'a rien a faire la puisque ta règle est une règle de réécriture.

RewriteRule ^(.)*-([0-9]+)-([0-9]+)\.html$ /agences.php?ag=$2&cat=$3 [L,R=301]

Ceci est une règle de réécriture uniquement et non de redirection.
 
Nouveau WRInaute
alors c'est peut être moi qui ai loupé un truc du coup :

comment faire comprendre à google que ma page

Code:
http://www.url.fr/agences.php?id=45&cat=45

s'appele désormais

Code:
http://www.url.fr/agence-region-chartres-quotidien-45-45.html

le simple fait de mettre ma premiere regle de réecriture va permettre la réindexation url des pages non réecrites en pages réecrites et google va comprendre que c'est les memes ?
 
WRInaute discret
Code:
RewriteRule ^agences.php?id=45&cat=45  /agence-region-chartres-quotidien-45-45.html [R=301]

Je pense que ca doit marcher
 
Nouveau WRInaute
Helas non cela me fait la même choe qu'avec [L,R=301] ou [QSA,L,R=301] , j'en déduis donc qu'il n'aime pas les [R=301] lorsque l'on déclare une regle de réecriture ....

mais google va t'il finir par comprendre que mes pages non réecrites sont les mêmes que les pages réecrites ??
le [L] est il suffisant ??

comment s'arracher les cheveux sur un truc qui fonctionne ... :evil:
 
WRInaute discret
Il faut que tu laisse ta regle précedente qui marchait

1 règle de réécriture et une régle de redirection

Code:
RewriteRule ^(.)*-([0-9]+)-([0-9]+)\.html$ /agences.php?ag=$2&cat=$3 [L]
RewriteRule ^agences.php?id=45&cat=45  /agence-region-chartres-quotidien-45-45.html [R=301]

La premiére réécrit tes url et la deuxiéme redirige ton ancienne url référencé et elle n'en redirige qu'une.

tu dois le faire pour toutes les urls reférencé avec .php?...

si tu as 50 pages, c'est 50 lignes, ou alors trouver une methode pour récupérer les paramétres et les reprendre dans la redirection.

mais google va t'il finir par comprendre que mes pages non réecrites sont les mêmes que les pages réecrites ??
le [L] est il suffisant ??

non, il va pas comprendre et va donc avoir deux pages identiques indexés.
a ma connaissance, il n'aime pas ca.
 
WRInaute passionné
Il faut que tu fasses une redirection 301 directement sur ton fichier "agences.php" (avec header(), tu trouveras ça sur ce forum)

Tu mets par exemple une variable dans ton get, du style

RewriteRule ^(.)*-([0-9]+)-([0-9]+)\.html$ /agences.php?ag=$2&cat=$3&rewrite=ok [L]

Si tu vois que Rewrite=ok n'est pas définit, tu fais une redirection 301 vers la nouvelle URL que Google doit remplacer.

Ainsi, quand toi, tes visiteurs ou google iront sur les anciennes URL, ils auront une redirection 301 vers les nouvelles URL, et tu ne changes rien à ton .htaccess (donc [L] et pas R=301)
 
Nouveau WRInaute
ok c'est bien ce qui me semblais, j'ai donc actuellement un probleme de duplicate content ...

Merci a vous deux pour vos réponses, je vais tenter la redirection 301 en php pour eviter ca, car avec 1500 pages indexées, j'ai pas fini de manger du htaccess sinon ^^
 
Discussions similaires
Haut