Boucle!

WRInaute impliqué
Bonjour,

J'ai un petit souci avec mon .htaccess: j'aimerai transformer des urls existantes et référencée (toto.php?mod=lemod&id=13) en url rewrite (toto-13.html), donc faire une redirection 301 puis un urlrewrite dessus. Mais bien entendu ça part en boucle... Comment faire?

Ma redirection 301:

Code:
RewriteCond %{QUERY_STRING} mod=lemod&id=([0-9]+)$
RewriteRule  ^.*$ /toto-%1\.html? [R=301]

Puis j'ai:

Code:
RewriteRule ^toto-([0-9]+)\.html$ toto.php?mod=lemod&id=$1  [L]

Merci
 
WRInaute impliqué
Ca marche, merci. Mais j'ai regardé et je ne comprends pas bien, en tout cas impossible à appliquer à mon cas... :(
 
WRInaute discret
Ok alors je vais te le faire :)
Voici ce qui correspond normalement à ton cas:

Code:
RewriteEngine on

RewriteRule     ^toto-([0-9]+).html$       toto.php?mod=lemod&id=$1 [E=BREAK:1,L]

RewriteCond     %{ENV:REDIRECT_BREAK}     !^1$
RewriteCond     %{QUERY_STRING}   ^mod=lemod&id=([0-9]+)$
RewriteRule     ^toto.php$       toto-%1.html [R=301,L]
 
WRInaute discret
1) As-tu d'autres règles dans ton htaccess ou essayes-tu uniquement avec le code que je t'ai donné ?
2) Essayes-tu exactement le code que je t'ai donné ou l'as-tu légèrement modifié (ne serait-ce que les noms de page) ?

Si tu sais, mets le code de ton htaccess ici afin de voir d'où peut venir le problème.

Autre chose: est-ce que la nouvelle adresse (l'url réécrite, par exemple toto-NOMBRE.html) fonctionne ? Quand je dis "fonctionne", cela signifie qu'elle doit afficher le même contenu que toto.php?mod=lemod&id=NOMBRE
 
WRInaute impliqué
Non, en effet le code donné est une extrapolation du vrai code, mais la structure reste la même. Le .htaccess fait 493 lignes et le contenu je préfère le garder confidentiel et non public. Je peux te le mettre en MP si tu veux? Mais à ne pas diffuser publiquement si tu veux bien.

Sinon oui, la page toto-514.html point bien sur la bonne page.
Et je en trouve aucun conflit avec d'autres règles dans le .htaccess :(
 
WRInaute discret
Oui pas de problème, je comprends bien :)

As-tu essayé en plaçant mon code juste après "RewriteEngine on" (avant toute autre règle) ?
Si ça ne fonctionne toujours pas, alors soit tu fais une erreur soit il y a un conflit.
Dans ce cas, tu peux m'envoyer le contenu de ton htaccess en MP, je regarderai quand j'aurai 2 minutes
 
WRInaute impliqué
Oui, c'est bien placé juste après le rewriteengine on... Je comprends pas... Je t'ai envoyé le htaccess en MP
 
WRInaute discret
Je ne vois pas d'erreur dans ton code. De plus, on évite tout conflit en plaçant les 2 règles au début.

En résumé, tu me dis que l'url réécrite toto-NOMBRE.html affiche bien le contenu.
Par contre, si tu tentes d'accéder à toto.php?mod=lemod&id=NOMBRE tu as une 404.
C'est bien cela ?

Il n'y a aucune redirection visible lorsque tu accèdes directement à ta page php? L'url dans la barre d'adresse de ton navigateur reste celle de ta page php? Ou une autre?
Tu peux toujours utiliser un sniffeur http pour voir ce qu'il se passe (par exemple le module "HTTP Header" sous Firefox, très utile par moment :))
 
WRInaute impliqué
J'ai "The requested URL /home/xxxx/public_html/toto-18480.html was not found on this server." ...

Dans le véritable nom d'url j'ai plutôt toto-titi-14.html mais je pense que ça ne change pas grand chose?
 
WRInaute impliqué
en fait je viens de m'apercevoir que l'url renvoyée par la page d'erreur pose un problème: il remonte jusqu'au /home du serveur:

-http://www.xxx.com/home/xxx/public_html/toto-18480.html?mod=lemod&id=18480
 
WRInaute discret
Recif a dit:
J'ai "The requested URL /home/xxxx/public_html/toto-18480.html was not found on this server." ...

Dans le véritable nom d'url j'ai plutôt toto-titi-14.html mais je pense que ça ne change pas grand chose?

Etrange, surtout quand tu me dis que l'accès à toto-18480.html est OK...
Ton htaccess est à la racine du site? Et ta page php également?

Recif a dit:
en fait je viens de m'apercevoir que l'url renvoyée par la page d'erreur pose un problème: il remonte jusqu'au /home du serveur:

-http://www.xxx.com/home/xxx/public_html/toto-18480.html?mod=lemod&id=18480

Ceci n'a pas vraiment de sens :?
Essayes ceci, juste par curiosité pour voir si ça fonctionne de cette manière:

Code:
RewriteEngine on

RewriteRule     ^toto-([0-9]+).html$       toto.php?mod=lemod&id=$1 [E=BREAK:1,L]

RewriteCond     %{ENV:REDIRECT_BREAK}     !^1$
RewriteCond     %{QUERY_STRING}   ^mod=lemod&id=([0-9]+)$
RewriteRule     ^toto.php$       http://%{HTTP_HOST}/toto-%1.html? [R=301,L]
 
WRInaute impliqué
oui, htaccess à la racine et fichier également

Après modif j'ai ça:

-http://www.xxx.com/toto-18480.html?mod=lemod&id=18480
 
WRInaute discret
Recif a dit:
Après modif j'ai ça:

-http://www.xxx.com/toto-18480.html?mod=lemod&id=18480

C'est déjà mieux. Ca te redirige bien vers la nouvelle url.
Tu as le contenu adéquat qui s'affiche également ?
Par contre je ne comprends pas pourquoi il ajoute le query string à l'url, c'est que quelque chose se passe mal dans la réécriture, même si on évite la boucle.

EDIT: tu as bien mis le "?" juste après le ".html" sur la dernière ligne? Normalement ce n'est pas le problème mais on ne sait jamais.
 
WRInaute impliqué
Bingo! C'était ça en effet, j'avais oublié ce "?"... Correction faite ça fonctionne! :)
Super, merci pour le temps que tu as pris pour m'aider en tout cas!
 
Discussions similaires
Haut