Pbm de réécriture qui ne s'effectue pas !

Nouveau WRInaute
Bonjour tout le monde,

Je précise en intro que j'ai longuement cherché avant de poser cette question mais j'avoue que là je bloque et je me dit même que ça ne doit pas être un problème technique mais plutôt cela doit venir du fait que je suis chez OVH.

Je voudrais que dans mon site, au lieu de :
http://www.monsite.com/test.php?id=$1&title=$2

il y ait :
http://www.monsite.com/$1-$2.html

donc j'ai mis cela dans le htaccess :
RewriteRule ^([0-9]*)-(([a-z]|-)*).html /test.php?id=$1&title=$2 [L,R=301]

Si vous pouviez me dire où je me suis trompé, ça m'aiderait parce que ça rend fou...

Merci d'avance
 
WRInaute occasionnel
essaie ça ? -http://www.eric-couchelou.net/test-de-rewriterules-en-ligne/
Imho OVH n'a rien à voir là-dedans, ça se saurait :wink:
 
Nouveau WRInaute
B-vibes a dit:
essaie ça ? -http://www.eric-couchelou.net/test-de-rewriterules-en-ligne/

Merci pour ta réponse rapide, j'ai essayé ce site mais il me dit que mon expression est bonne et que ça me renvoie la bonne page...Donc visiblement le problème est ailleurs ?
 
WRInaute discret
avner a dit:
Je voudrais que dans mon site, au lieu de :
http://www.monsite.com/test.php?id=$1&title=$2

il y ait :
http://www.monsite.com/$1-$2.html

donc j'ai mis cela dans le htaccess :
RewriteRule ^([0-9]*)-(([a-z]|-)*).html /test.php?id=$1&title=$2 [L,R=301]

Si tu veux que l'adresse "http://www.monsite.com/test.php?id=$1&title=$2" soit redirigée de façon permanente vers l'adresse "http://www.monsite.com/$1-$2.html", alors il faudra aussi gérer la réécriture de "http://www.monsite.com/$1-$2.html" par après (fort lourd...).

Sinon, tu peux faire en sorte que l'adresse "http://www.monsite.com/$1-$2.html" pointe sur "test.php?id=$1&title=$2", alors voici la règle de réécriture dans ce cas:

Code:
RewriteRule     ^([1-9][0-9]*)-(.+).html$     test.php?id=$1&title=$2 [L]

PS: j'ai mis (.+) pour le titre car je ne suis pas certains de ce dont tu as besoin (hormis des lettres a->z et du tiret, le "|" aussi ?) En tous les cas, cette règle doit fonctionner
 
Nouveau WRInaute
Giustino a dit:
Si tu veux que l'adresse "http://www.monsite.com/test.php?id=$1&title=$2" soit redirigée de façon permanente vers l'adresse "http://www.monsite.com/$1-$2.html", alors il faudra aussi gérer la réécriture de "http://www.monsite.com/$1-$2.html" par après (fort lourd...).

Sinon, tu peux faire en sorte que l'adresse "http://www.monsite.com/$1-$2.html" pointe sur "test.php?id=$1&title=$2", alors voici la règle de réécriture dans ce cas:

Code:
RewriteRule     ^([1-9][0-9]*)-(.+).html$     test.php?id=$1&title=$2 [L]

PS: j'ai mis (.+) pour le titre car je ne suis pas certains de ce dont tu as besoin (hormis des lettres a->z et du tiret, le "|" aussi ?) En tous les cas, cette règle doit fonctionner

Merci pour ta réponse rapide. En fait sur mon site, il y a un blog avec des news et les URL des news sont http://www.monsite.com/test.php?id=(un-chiffre)&title=(le-titre-de-l-article-avec-des-tirets)
et comme je trouve ça moche, je voudrai comme les URL des news soit http://www.monsite.com/(un-chiffre)-(le-titre-de-l-article-avec-des-tirets).

Je sais pas si je suis assez clair. Et jusque là j'ai fait toutes les modifs que l'on m'a suggerré mais rien ne change !
 
WRInaute discret
Alors voici la règle adéquate pour ton cas:

Code:
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]

Qu'est-ce qui ne fonctionne pas? Ou plutôt, quel est le résultat lorsque tu testes?
As-tu bien le rewriting activé? As-tu bien mis "RewriteEngine on" avant ?

Ps: est-ce que tu testes bien en accédant à http://www.site.com/id-title.html ?
 
WRInaute accro
Bonjour
Donc tu as mis en place une règle de réécriture, qui dit au serveur que /$1-$2.html doit appeler le script et les variables /test.php?id=$1&title=$2. Ok.

A te lire, j'ai l'impression que tu n'as rien fait d'autre, me trompe-je ?

Sur ton site, tu vois que les URL n'ont pas été modifiées. Et c'est normal, la réécriture d'URL ne va pas modifier tes liens <a href>.

Il te faut donc, dans ton site, modifier tous les liens pour les faire pointer vers l'URL au format réécrit
et mettre en place des redirections 301 des URL non réécrites vers les URL réécrites.
 
Nouveau WRInaute
nickargall a dit:
Bonjour
Donc tu as mis en place une règle de réécriture, qui dit au serveur que /$1-$2.html doit appeler le script et les variables /test.php?id=$1&title=$2. Ok.

A te lire, j'ai l'impression que tu n'as rien fait d'autre, me trompe-je ?

Sur ton site, tu vois que les URL n'ont pas été modifiées. Et c'est normal, la réécriture d'URL ne va pas modifier tes liens <a href>.

Il te faut donc, dans ton site, modifier tous les liens pour les faire pointer vers l'URL au format réécrit
et mettre en place des redirections 301 des URL non réécrites vers les URL réécrites.

A te lire, j'avoue que je me sens bête lol
C'est vrai que je n'ai pas changé les liens href car je pensais que c'était également ce que faisait le htaccess. Par contre j'avoue que je ne vois pas comment faire alors... Si tu as une idée, je suis preneur.
En tout cas merci d'avoir trouvé l'origine du problème.
 
WRInaute discret
nickargall a dit:
Il te faut donc, dans ton site, modifier tous les liens pour les faire pointer vers l'URL au format réécrit
et mettre en place des redirections 301 des URL non réécrites vers les URL réécrites.

Tu fais ce qu'a dit nickargall:

- Modifier à la main tous les liens dans tes pages (avec la nouvelle forme réécrite). Si tu ne fais pas celà, au pire ça pourrait fonctionner si tu fais la redirection 301 mais c'est moins propre.

- Mettre en place la règle de redirection 301 pour les urls avec "test.php" vers la forme réécrite ("id-title.html")

Sans oublier d'écrire une règle pour faire pointer la forme réécrite "id-title.html" vers quelque chose
 
Nouveau WRInaute
Giustino a dit:
nickargall a dit:
Il te faut donc, dans ton site, modifier tous les liens pour les faire pointer vers l'URL au format réécrit
et mettre en place des redirections 301 des URL non réécrites vers les URL réécrites.

Tu fais ce qu'a dit nickargall:

- Modifier à la main tous les liens dans tes pages (avec la nouvelle forme réécrite). Si tu ne fais pas celà, au pire ça pourrait fonctionner si tu fais la redirection 301 mais c'est moins propre.

- Mettre en place la règle de redirection 301 pour les urls avec "test.php" vers la forme réécrite ("id-title.html")

Sans oublier d'écrire une règle pour faire pointer la forme réécrite "id-title.html" vers quelque chose

Merci à vous 2, j'ai réussi ! Mais maintenant j'ai un autre problème, c'est que quand je clique sur un lien, une fois arrivé sur la page voulue, dans l'URL apparaît la vraie URL au lieu de l'URL réécrite, ce qui est un peu embêtant non ?
 
Nouveau WRInaute
Giustino a dit:
Montre les règles de ton htaccess ici pour tenter de corriger ton problème

J'ai préféré tout mettre même si certaines lignes ne servent à rien lol
Code:
SetEnv PHP_VER 5
ErrorDocument 404 /404.php
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^monsite\.com$
RewriteRule (.*) http://www.monsite.com/$1 [R=301,L]
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     /test.php?id=$1&title=$2 [R,L=301]
 
WRInaute discret
avner a dit:
Giustino a dit:
Montre les règles de ton htaccess ici pour tenter de corriger ton problème

J'ai préféré tout mettre même si certaines lignes ne servent à rien lol
Code:
SetEnv PHP_VER 5
ErrorDocument 404 /404.php
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^monsite\.com$
RewriteRule (.*) http://www.monsite.com/$1 [R=301,L]
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     /test.php?id=$1&title=$2 [R,L=301]

Ok donc tu as bien mis la règle que je t'ai écrite pour faire pointer l'url réécrite vers la page "test.php". Mais il te faut aussi la règle pour rediriger (redirection 301) les urls "test.php?...." vers la nouvelle forme réécrite. Voici quelque chose de vite fait, c'est possible qu'il y ait une erreur, tiens moi au courant.

Code:
RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule      ^test.php$                 http://%{HTTP_HOST}/%1-%2 [R=301, L]

EDIT: je viens de voir dans ton code htaccess, c'est [R=301,L] et non [R,L=301]
 
Nouveau WRInaute
Giustino a dit:
avner a dit:
Giustino a dit:
Montre les règles de ton htaccess ici pour tenter de corriger ton problème

J'ai préféré tout mettre même si certaines lignes ne servent à rien lol
Code:
SetEnv PHP_VER 5
ErrorDocument 404 /404.php
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^monsite\.com$
RewriteRule (.*) http://www.monsite.com/$1 [R=301,L]
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     /test.php?id=$1&title=$2 [R,L=301]

Ok donc tu as bien mis la règle que je t'ai écrite pour faire pointer l'url réécrite vers la page "test.php". Mais il te faut aussi la règle pour rediriger (redirection 301) les urls "test.php?...." vers la nouvelle forme réécrite. Voici quelque chose de vite fait, c'est possible qu'il y ait une erreur, tiens moi au courant.

Code:
RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule      ^test.php$                 http://%{HTTP_HOST}/%1-%2 [R=301, L]

EDIT: je viens de voir dans ton code htaccess, c'est [R=301,L] et non [R,L=301]

Non ça ne marche toujours pas. J'ai suivi ta technique j'ai une erreur 404, alors j'ai fait quelques modifs mineures et je retombe sur la même URL...
 
WRInaute discret
J'ai regardé ton code htaccess, j'y ai vu quelques petites erreurs et j'ai également enlevé ce qui n'est pas nécessaire histoire de débuguer l'essentiel. Testes avec ceci:

Code:
RewriteEngine on

# faire pointer la forme réécrite vers le fichier php (PAS DE REDIRECTION)
# pour cette ligne, oublie le "/" avant "test.php" et NE PAS FAIRE de redirection 301 ! Comme ceci:
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]

# redirection 301 (permanente) des urls avec "test.php" vers la forme réécrite
RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     http://%{HTTP_HOST}/%1-%2 [R=301,L]
 
Nouveau WRInaute
Giustino a dit:
J'ai regardé ton code htaccess, j'y ai vu quelques petites erreurs et j'ai également enlevé ce qui n'est pas nécessaire histoire de débuguer l'essentiel. Testes avec ceci:

Code:
RewriteEngine on

# faire pointer la forme réécrite vers le fichier php (PAS DE REDIRECTION)
# pour cette ligne, oublie le "/" avant "test.php" et NE PAS FAIRE de redirection 301 ! Comme ceci:
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]

# redirection 301 (permanente) des urls avec "test.php" vers la forme réécrite
RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     http://%{HTTP_HOST}/%1-%2 [R=301,L]

Il y avait une erreur malgré tout mais j'ai trouvé d'où ça venait :
RewriteCond %{QUERY_STRING} ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$

il fallait mettre :
RewriteCond %{QUERY_STRING} /id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$

au début j'avais mis le slash dans la rewrite rule mais c'était dans la rewrite cond qu'il fallait le mettre cqfd.

Merci à toi Giustino, t'es un chef !

Mais une dernière question : si je veux donner l'impression que ces news sont dans un sous répertoire "blog", je dois donc faire comme cela :

Code:
RewriteRule     ^blog/([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]
RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     http://%{HTTP_HOST}/blog/%1-%2 [R=301,L]

Parce que j'ai essayé et ça n'a pas l'air de marcher...(évidemment j'ai changé mes href cette fois lol...)
 
WRInaute discret
avner a dit:
Il y avait une erreur malgré tout mais j'ai trouvé d'où ça venait :
RewriteCond %{QUERY_STRING} ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$

il fallait mettre :
RewriteCond %{QUERY_STRING} /id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$

au début j'avais mis le slash dans la rewrite rule mais c'était dans la rewrite cond qu'il fallait le mettre cqfd.

Vraiment étrange cette solution, c'est pas logique si tu veux mon avis. Il doit y avoir encore un soucis quelque part.

avner a dit:
Mais une dernière question : si je veux donner l'impression que ces news sont dans un sous répertoire "blog", je dois donc faire comme cela :

Code:
RewriteRule     ^blog/([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]
RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     http://%{HTTP_HOST}/blog/%1-%2 [R=301,L]

Parce que j'ai essayé et ça n'a pas l'air de marcher...(évidemment j'ai changé mes href cette fois lol...)

Qu'est-ce qui ne fonctionne pas?

Lorsque tu accèdes à http://www.tonsite.com/12345-mon-titre-d-article.html as-tu bien un contenu qui s'affiche? Ceci pour tester que l'url réécrite pointe bien sur test.php avec les paramètres en arguments.

Et pour tester la redirection permanente, lorsque tu tentes d'accéder à http://www.tonsite.com/test.php?id=12345&title=mon-titre-d-article es-tu bien redirigé vers l'adresse réécrite et vois-tu bien également le contenu?

Sois certains que tout ceci fonctionne avant d'ajouter "blog" même si la syntaxe de tes règles avec "blog" me semble correcte.
 
Nouveau WRInaute
Giustino a dit:
avner a dit:
Il y avait une erreur malgré tout mais j'ai trouvé d'où ça venait :
RewriteCond %{QUERY_STRING} ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$

il fallait mettre :
RewriteCond %{QUERY_STRING} /id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$

au début j'avais mis le slash dans la rewrite rule mais c'était dans la rewrite cond qu'il fallait le mettre cqfd.

Vraiment étrange cette solution, c'est pas logique si tu veux mon avis. Il doit y avoir encore un soucis quelque part.
En fait en suivant ton écriture le résultat est du type http://www.monsite.com/id-titile?id=(id)&title=(title)

Giustino a dit:
Qu'est-ce qui ne fonctionne pas?

Lorsque tu accèdes à http://www.tonsite.com/12345-mon-titre-d-article.html as-tu bien un contenu qui s'affiche? Ceci pour tester que l'url réécrite pointe bien sur test.php avec les paramètres en arguments.
La réponse est oui
Giustino a dit:
Et pour tester la redirection permanente, lorsque tu tentes d'accéder à http://www.tonsite.com/test.php?id=12345&title=mon-titre-d-article es-tu bien redirigé vers l'adresse réécrite et vois-tu bien également le contenu?
La réponse est oui également
Giustino a dit:
Sois certains que tout ceci fonctionne avant d'ajouter "blog" même si la syntaxe de tes règles avec "blog" me semble correcte.
Justement malgré cela cela ne marche pas.
Tu penses que le problème vient de mes href ?
 
WRInaute discret
avner a dit:
En fait en suivant ton écriture le résultat est du type http://www.monsite.com/id-titile?id=(id)&title=(title)

Voici normalement la correction pour ne plus avoir les paramètres après (ajout d'un "?" à la fin):

Code:
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]

RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     http://%{HTTP_HOST}/%1-%2? [R=301,L]

avner a dit:
Justement malgré cela cela ne marche pas.
Tu penses que le problème vient de mes href ?

Bah honnêtement je vois pas pourquoi, au pire montre moi ici tes liens href pour vérifier (ceux avec et sans "blog", histoire de voir la syntaxe de tes liens). Encore une fois, quand tu dis "cela ne marche pas", je n'ai pas de boule de cristal pour deviner l'erreur retournée ^^ quel est le résultat obtenu avec le "blog" en plus dans tes urls? En faisant les 2 mêmes tests décrits plus haut, qu'obtiens-tu?
 
Nouveau WRInaute
Giustino a dit:
Voici normalement la correction pour ne plus avoir les paramètres après (ajout d'un "?" à la fin):

Code:
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2 [L]

RewriteCond     %{QUERY_STRING}     ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     http://%{HTTP_HOST}/%1-%2? [R=301,L]
J'ai essayé mais il y a encore le même problème, si je ne mets pas le slash devant id j'arrive sur la page sans le html à la fin donc ça tombe sur du 404.

Giustino a dit:
Bah honnêtement je vois pas pourquoi, au pire montre moi ici tes liens href pour vérifier (ceux avec et sans "blog", histoire de voir la syntaxe de tes liens). Encore une fois, quand tu dis "cela ne marche pas", je n'ai pas de boule de cristal pour deviner l'erreur retournée ^^ quel est le résultat obtenu avec le "blog" en plus dans tes urls? En faisant les 2 mêmes tests décrits plus haut, qu'obtiens-tu?
mes liens sont de ce type :
Code:
<?php echo "{$donnees['id']}-{$titre_modif}.html" ?>
le id vient de la base de données mysql et le titre modif est le titre issu de la bdd que j'ai modifié afin qu'il soit en minuscules, sans accents et avec les espaces remplacés par des tirets pour les besoins de l'url.

Les liens avec blog sont :
Code:
<?php echo "blog/{$donnees['id']}-{$titre_modif}.html" ?>
 
WRInaute discret
Ce que je voulais en fait c'était plutôt les liens générés ^^ soit dans le code source html généré, soit au survol du lien avec ta souris.
 
Nouveau WRInaute
Giustino a dit:
Ce que je voulais en fait c'était plutôt les liens générés ^^ soit dans le code source html généré, soit au survol du lien avec ta souris.
J'avoue que je ne comprends pas trop, les liens sont de ce type :
Code:
<a href="[l'id de l'article]-[titre de l'article].html">Titre de l'article</a>
au survol de la souris j'ai bien le bon lien.
 
WRInaute discret
J'ai bien tout relu pour trouver l'erreur, et je dois m'excuser car je viens de me rendre compte de 2 choses:

1) j'avais pas fait attention que c'était une opération sur le même fichier -> boucle infinie
2) j'avais oublié le ".html" dans la réécriture avec "%1-%2"

Bref, voici la version finale (je l'ai testée) qui devrait faire ton bonheur:

Code:
RewriteRule     ^blog/([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]

RewriteCond     %{QUERY_STRING}	^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     	blog/%1-%2.html? [R=301,L]

Explications:

Pour éviter une boucle infinie de redirection, j'ai ajouté un paramètre (on peut mettre n'importe quoi, j'ai choisi le nom "PetitHackFaitMaison") dans la première règle de réécriture. De ce fait, la deuxième règle de réécriture ne se fera plus après avoir été réécrite par la première règle et donc plus de boucle infinie ! Tu me suis? Difficile à digérer je sais :D

Ensuite, j'ai rajouté mon impardonnable oubli ".html" après "%1-%2" dans la seconde règle de réécriture. Ce dernier étant suivi également par "?" afin d'éviter d'avoir les paramètres à la suite de l'url réécrite.

Enfin, tu peux choisir de laisser ou d'enlever "blog/" à ta convenance.

Voilà :)
 
Nouveau WRInaute
Giustino a dit:
J'ai bien tout relu pour trouver l'erreur, et je dois m'excuser car je viens de me rendre compte de 2 choses:

1) j'avais pas fait attention que c'était une opération sur le même fichier -> boucle infinie
2) j'avais oublié le ".html" dans la réécriture avec "%1-%2"

Bref, voici la version finale (je l'ai testée) qui devrait faire ton bonheur:

Code:
RewriteRule     ^blog/([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]

RewriteCond     %{QUERY_STRING}	^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$     	blog/%1-%2.html? [R=301,L]

Explications:

Pour éviter une boucle infinie de redirection, j'ai ajouté un paramètre (on peut mettre n'importe quoi, j'ai choisi le nom "PetitHackFaitMaison") dans la première règle de réécriture. De ce fait, la deuxième règle de réécriture ne se fera plus après avoir été réécrite par la première règle et donc plus de boucle infinie ! Tu me suis? Difficile à digérer je sais :D

Ensuite, j'ai rajouté mon impardonnable oubli ".html" après "%1-%2" dans la seconde règle de réécriture. Ce dernier étant suivi également par "?" afin d'éviter d'avoir les paramètres à la suite de l'url réécrite.

Enfin, tu peux choisir de laisser ou d'enlever "blog/" à ta convenance.

Voilà :)

J'ai pas de chance, chez moi ça ne marche pas ! Pourtant j'ai même essayé avec le slash qui faisait défaut à un moment. Je pense que c'est dû à l'ajout de "blog/" parce que j'ai repris ton écriture corrigée en enlevant blog et ça marche bien donc l'écriture est bonne cette fois...
 
WRInaute discret
Peux-tu me montrer le contenu de ton htaccess actuel ? Je suspecte une règle plus haut qui fait collision, même si étrangement tu me dis que ça fonctionne sans "blog/" mais pas avec "blog/" ... Bizarre !

Au pire, donne moi en PV le lien vers ton site pour que je vois le problème.

EDIT: tes liens réécrits sont bien à partir de la racine? Ex: http://www.tonsite.fr/blog/12345-un-titre-d-article.html (ou sans le "blog/")
 
Nouveau WRInaute
Giustino a dit:
Peux-tu me montrer le contenu de ton htaccess actuel ? Je suspecte une règle plus haut qui fait collision, même si étrangement tu me dis que ça fonctionne sans "blog/" mais pas avec "blog/" ... Bizarre !

Au pire, donne moi en PV le lien vers ton site pour que je vois le problème.

EDIT: tes liens réécrits sont bien à partir de la racine? Ex: http://www.tonsite.fr/blog/12345-un-titre-d-article.html (ou sans le "blog/")
Je te donne déjà la htaccess et si ça vient pas de ça, envoie moi un mp (je ne sais pas comment on fait lol) pour que je te donne le lien du site. Comme tu vas voir pour l'instant j'ai enlevé blog pour le test mais si tu veux faire le test donne moi un moment précis où tu veux tester pour que je rajoute "blog" dans le code.
Code:
SetEnv PHP_VER 5
ErrorDocument 404 /404.php

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^monsite\.com$
RewriteRule (.*) http://www.monsite.com/$1 [R=301,L]

RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]
RewriteCond     %{QUERY_STRING}   ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$        /%1-%2.html? [R=301,L]
 
WRInaute discret
Donc mon code fonctionne bien sans "blog" mais pas avec ?
Si c'est le cas, dans l'absolu, je ne vois pas d'où vient le problème.
Surtout que j'ai testé avec et sans "blog" et les résultats sont bons pour les deux.

Tu as essayé en mettant uniquement ceci dans ton htaccess (pour écarter cette piste):

(Version sans "blog")
Code:
RewriteEngine on
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]

RewriteCond     %{QUERY_STRING}   ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$        %1-%2.html? [R=301,L]

(Version avec "blog")
Code:
RewriteEngine on
RewriteRule     ^blog/([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]

RewriteCond     %{QUERY_STRING}   ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$        blog/%1-%2.html? [R=301,L]

Re-testes les deux cas et tiens moi au courant des résultats (encore une fois, essaye de détailler l'erreur plutôt que de dire "ça ne marche pas" sinon j'ai du mal à débuguer ^^)
 
Nouveau WRInaute
Giustino a dit:
Donc mon code fonctionne bien sans "blog" mais pas avec ?
Si c'est le cas, dans l'absolu, je ne vois pas d'où vient le problème.
Surtout que j'ai testé avec et sans "blog" et les résultats sont bons pour les deux.

Tu as essayé en mettant uniquement ceci dans ton htaccess (pour écarter cette piste):

(Version sans "blog")
Code:
RewriteEngine on
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]

RewriteCond     %{QUERY_STRING}   ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$        %1-%2.html? [R=301,L]

(Version avec "blog")
Code:
RewriteEngine on
RewriteRule     ^blog/([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&PetitHackFaitMaison [L]

RewriteCond     %{QUERY_STRING}   ^id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$        blog/%1-%2.html? [R=301,L]

Re-testes les deux cas et tiens moi au courant des résultats (encore une fois, essaye de détailler l'erreur plutôt que de dire "ça ne marche pas" sinon j'ai du mal à débuguer ^^)

Comme je me doutais la version sans blog fonctionne sans problème mais la version avec blog donne bien le bon lien mais la page d'arrivée est sans css (je sais pas si tu vois ce que je veux dire). Pourtant ça a l'air d'être bon je ne comprends vraiment pas !
 
WRInaute discret
avner a dit:
Comme je me doutais la version sans blog fonctionne sans problème mais la version avec blog donne bien le bon lien mais la page d'arrivée est sans css (je sais pas si tu vois ce que je veux dire). Pourtant ça a l'air d'être bon je ne comprends vraiment pas !

C'est tout à fait normal, car avec "blog/" tu as un répertoire virtuel et donc les liens (href vers tes css, etc) ne sont plus corrects. Pour palier à ce problème, il faut ajouter ceci dans ta page php juste après le <head> html:

Code:
<base href="http://www.tonsite.fr/" />

Maintenant, l'autre problème: si tu gardes mon code qui fonctionne et que tu l'ajoutes à ton htaccess (avec les autres règles de ton site), ça ne fonctionne plus? Que se passe-t-il dans ce cas-là?

On approche de la solution, courage ! :)
 
Nouveau WRInaute
Giustino a dit:
avner a dit:
Comme je me doutais la version sans blog fonctionne sans problème mais la version avec blog donne bien le bon lien mais la page d'arrivée est sans css (je sais pas si tu vois ce que je veux dire). Pourtant ça a l'air d'être bon je ne comprends vraiment pas !

C'est tout à fait normal, car avec "blog/" tu as un répertoire virtuel et donc les liens (href vers tes css, etc) ne sont plus corrects. Pour palier à ce problème, il faut ajouter ceci dans ta page php juste après le <head> html:

Code:
<base href="http://www.tonsite.fr/" />

Maintenant, l'autre problème: si tu gardes mon code qui fonctionne et que tu l'ajoutes à ton htaccess (avec les autres règles de ton site), ça ne fonctionne plus? Que se passe-t-il dans ce cas-là?

On approche de la solution, courage ! :)

Pas mal le base href je ne connaissais pas, c'est logique en effet. Je l'ai ajouté mais maintenant quand je clique sur le lien je reste dans ma page : "http://www.monsite.com/blog.php" (la page où se trouve la liste des articles) et il me met bien le lien de l'article dans l'url (ce qui est encore plus bizarre).
 
WRInaute discret
avner a dit:
Pas mal le base href je ne connaissais pas, c'est logique en effet. Je l'ai ajouté mais maintenant quand je clique sur le lien je reste dans ma page : "http://www.monsite.com/blog.php" (la page où se trouve la liste des articles) et il me met bien le lien de l'article dans l'url (ce qui est encore plus bizarre).

J'ai pas bien suivi là. Tu peux développer?
 
Nouveau WRInaute
Giustino a dit:
avner a dit:
Pas mal le base href je ne connaissais pas, c'est logique en effet. Je l'ai ajouté mais maintenant quand je clique sur le lien je reste dans ma page : "http://www.monsite.com/blog.php" (la page où se trouve la liste des articles) et il me met bien le lien de l'article dans l'url (ce qui est encore plus bizarre).

J'ai pas bien suivi là. Tu peux développer?

En fait, j'ai une page blog.php où sont listés tous les articles. Quand je clique sur l'article, il me met bien le bon lien mais je suis toujours sur la page blog.php...
 
WRInaute discret
J'ai testé sur ton site. En fait je pense que du côté rewriting (htaccess) tout est ok.
Le problème vient d'ailleurs à priori.

Tu devrais débuguer côté php. Par exemple, commences par faire un print_r($_GET) dans la page qui est appelée par l'url réécrite et vérifies que c'est bon. Si c'est ok, débugue niveau par niveau jusqu'à tomber sur le problème.

PS: rien avoir directement mais, par précaution, quand tu testes tes règles de redirection, utilises plutôt R=302 jusqu'à ce que tout fonctionne parfaitement pour le remplacer par R=301 ensuite.
 
Nouveau WRInaute
Giustino a dit:
J'ai testé sur ton site. En fait je pense que du côté rewriting (htaccess) tout est ok.
Le problème vient d'ailleurs à priori.

Tu devrais débuguer côté php. Par exemple, commences par faire un print_r($_GET) dans la page qui est appelée par l'url réécrite et vérifies que c'est bon. Si c'est ok, débugue niveau par niveau jusqu'à tomber sur le problème.

PS: rien avoir directement mais, par précaution, quand tu testes tes règles de redirection, utilises plutôt R=302 jusqu'à ce que tout fonctionne parfaitement pour le remplacer par R=301 ensuite.

Comment tu fais pour mettre le print_r sur la page appelée sachant que ce n'est pas une page. Je sais c'est une question bête mais je préfère bien comprendre.

ok pour le 302.
 
Nouveau WRInaute
Bon la vérité était ailleurs...J'ai trouvé la solution sur un autre forum où une personne avait un problème identique. Voici comment j'ai adapté cela par rapport à mon problème. Je mets uniquement le htaccess pour que ça puisse servir à quelqu'un. UN GRAND MERCI à Giustino qui s'est cassé la tête avec moi pour trouver une solution.

Code:
SetEnv PHP_VER 5
RewriteEngine on
RewriteBase /
SetEnv SESSION_USE_TRANS_SID 0
Options -Multiviews
RewriteRule ^blog/$ /blog.php [L]
RewriteRule ^blog/(.+)$ /$1 [L]
RewriteRule     ^([1-9][0-9]*)-([^\-][a-z\-]+[^\-]).html$     test.php?id=$1&title=$2&HackFaitMaison [L]
RewriteCond     %{QUERY_STRING}   /id=([1-9][0-9]*)&title=([^\-][a-z\-]+[^\-])$
RewriteRule     ^test.php$        %1-%2.html? [R=302,L]
 
Discussions similaires
Haut