Bonjour, Voilà mon soucis : J'aimerai effectuer une réécriture d'adresse de pages qui sont déja référencées. Le but étant que l'utilisateur voit article-XX.html dans sa barre d'adresse au lieu de article.php?id=XX. (en gardant mon fichier nommé article.php, normal ) donc j'ai (naïvement) fait ça : Code: #Reecriture RewriteRule ^article-(.*).html$ article.php?id=$1 #Redirection RewriteRule ^article.php?id=(.*)$ article-$1.html [R=301] La redirection marche mais je ne sais pas si le R301 est correcte et donc si je ne perdrai pas mon référencement. J'ai fait un test de mon entête et j'ai comme réponse un simple HTTP/1.0 200 OK , devrais-je avoir un HTTP/1.1 301 ??? aussi, y-a t-il un moyen pour que si l'on tape www.monsite.fr/article.php?id=12 on tombe sur cette meme page mais avec l'url = www.monsite.fr/article-12.html ? Qu'en pensez vous ?
les paramètres ne marchent pas comme ca. il faut utiliser un truc du style : Code: RewriteCond %{QUERY_STRING} ^id=(.*)$ RewriteRule ^article\.php$ article-%1.html [R=301]
Déjà, Merci pour ta réponse ! En effet il faut une condition, le fait est que maintenant le R301 est pris en compte mais ne fait pas ce que je voudrais qu'elle fasse. J'ai essayé ca : Code: #Reecriture RewriteRule ^article-(.*).html$ article.php?id=$1 #Redirection RewriteCond %{QUERY_STRING} ^id=(.*)$ RewriteRule ^article\.php$ http://www.monsite.fr/article-%1.html [R=301] pour l'adresse www.monsite.fr/article-xx.html, je suis redirigé vers www.monsite.fr/article-xx.html?id=xx même redirection si je tape www.monsite.fr/article.php?id=xx et pour les deux un petit message : "Redirection de page incorrecte" ...
Je pense que quelque chose comme ca devrait marcher : Code: #Reecriture RewriteRule ^article-(.*)\.html$ /article2.php?id=$1 [L] #Redirection RewriteCond %{QUERY_STRING} ^id=(.*)$ RewriteCond %{REQUEST_URI} !html$ RewriteRule ^article\.php$ /article-%1.html? [R=301,L] En renommant article.php en article2.php ca marche (sinon ca boucle et je ne comprend pas pourquoi car il y a un [L]).
Je viens de tester ce bout de code et effectivement ca boucle. La redirection marche au niveau de l'url, mais on arrive sur une page d'erreur "Redirection de page incorrecte" La redirection a du coup beaucoup moins d'intéret si on renome article.php. Tout comme toi je ne comprends pas pourquoi ca boucle par rapport au [L], mais il me semble que les conditions laissent passer article-xx.html , même si ça devrait s'arreter avant ... :? Je continu de chercher de mon coté mais... Moi pas bien comprendre... Vous avoir idée ?
Je me fait doucement aux principes de réecriture ... donc en fait le problème est clair maintenant (pour moi) j'ai refait mon code ... c'est la même chose, mais bon, je le met quand même : Code: #Reecriture RewriteRule article-([0-9]+)\.html$ article.php?id=$1 [L] #Redirection RewriteCond %{REQUEST_URI} ^.*\.php$ RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^article\.php$ http://www.monsite.fr/article-%1.html? [R=301] Le probleme viens exclusivement du fait que la lecture du .htaccess ne s'arrete pas apres : Code: RewriteRule article-([0-9]+)\.html$ article.php?id=$1 [L] Deplus, la condition : Code: RewriteCond %{REQUEST_URI} !html$ ou Code: RewriteCond %{REQUEST_URI} ^.*\.php$ est, je crois, toujours valide car après la récriture (peut importe l'url tapé), c'est la version en ".php" qui arrive à la condition. Je fais fausse route ? Ca ne résous pas pour autant le problème, mais au moins c'est plus clair...
J'ai "bricolé" une solution ... Comme on peux pas faire de compteur de boucle j'ai fait un marqueur qui dit "le lien est réécrit", voici donc le code qui marche : Code: #Reecriture RewriteRule article-([0-9]+)\.html$ article.php5?id=$1&- [L] #Redirection RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^article\.php5$ http://www.fundraisers.fr/test/article-%1\.html? [R=301] J'ai rajouté &- juste avant le [L] ce qui fait que l'url rewrité ne répond plus la condition de redirection et ceci n'influx pas sur l'adresse de la page. C'est pas très propre mais ça marche !!! Merci en tout cas webmasterlamogere pour ton aide ! Je marque la discussion comme RESOLU, étant donné que ça marche. Mais ce n'est pas une "vraie" solution à ce problème et vous pouvez d'ailleur toujours en proposers une !