v2mnet Posté 12 Avril 2005 Posté 12 Avril 2005 Bonjour à tous, Je cherche à transformer environ 100 urls php en html pour le référencement. url d'origine du style /produit.php?id=123 à transformer en /produit-ref-123.html L'url rewriting fonctionne, mais pas la redirection 301. Voila ce que j'obtiens : HTTP/1.1 302 Found Status: 301 Moved Permanently Comment modifier les règles ci-dessous pour dire que TOUTES les urls doivent être redirigées en 301, sachant que les scripts concernés sont répartis dans différents répertoires ? Faut-il écrire la règle 3? RewriteRule (.*)\.html http://www.host.com/rep1/$1.php [R=301,L] RewriteRule (.*)\.html http://www.host.com/rep2/$1.php [R=301,L] RewriteRule (.*)\.html http://www.host.com/rep3/$1.php [R=301,L] etc... et idem pour les autres ?? # htaccess Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)(-.+)-([^-]+)-([^-&]*)([^-]*)\.html$ $1$2&$3=$4$5\.html [N] RewriteRule ^(.*)-([^-]+)-([^-]*)(.*)\.html$ $1.php?$2=$3$4 [L] RewriteRule ^(.*).html$ $1.php [L] la fonction $url = url_rewrite( $url ) retourne bien la bonne url Le fichier produit.php commence comme ca : if ( !empty( $_GET['id'] ) ) { header("Status: 301 Moved Permanently"); $url = $_SERVER["REQUEST_URI"] ; $url = str_replace("id", "ref", $url ) ; $url = url_rewrite($url) ; header("Location: $url"); die; } elseif( strpos($_SERVER["REQUEST_URI"], "php" ) !== false) { header("Status: 301 Moved Permanently"); $url = $_SERVER["REQUEST_URI"] ; $url = url_rewrite($url) ; header("Location: $url"); die; }
Compte supprimé Posté 12 Avril 2005 Posté 12 Avril 2005 (modifié) Je crois qu'il ne faut pas préciser -http://www.host.com/ dans tes rewriterules Modifié 12 Avril 2005 par jeroen
v2mnet Posté 12 Avril 2005 Auteur Posté 12 Avril 2005 Non, ta proposition ne marche pas. Erreur 404 Je viens de lire que la règle RewriteRule ^(.*).html$ $1.php [L] va impliquer une redirection 302, car la 301 n'est pas indiquée explicitement. Pour imposer une redirection 301, il faut rajouter [R=301,L], mais dans ce cas, il faut indiquer une url externe avec http://... La règle suivante ne marche pas non plus. Erreur 404 RewriteRule (.*)\.html http://www.host.com/rep1/$1.php [R=301,L] Comment transformer la règle RewriteRule ^(.*).html$ $1.php [L] pour dire que tous les scripts placés dans tous les sous répertoires du répertoire /shop/ sont concernés ? Je sèche. Merci à vous tous par avance !
v2mnet Posté 12 Avril 2005 Auteur Posté 12 Avril 2005 Plus précisément, je cherche à transformer les règles suivantes pour dire que ces redirections ne sont plus 302 (implictes) mais 301. # htaccess Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)(-.+)-([^-]+)-([^-&]*)([^-]*)\.html$ $1$2&$3=$4$5\.html [N] RewriteRule ^(.*)-([^-]+)-([^-]*)(.*)\.html$ $1.php?$2=$3$4 [L] RewriteRule ^(.*).html$ $1.php [L] Si quelqu'un a une idée !!
v2mnet Posté 12 Avril 2005 Auteur Posté 12 Avril 2005 Avec des résultats comme les suivants : pour les urls d'origine du style /produit.php?id=123 HTTP/1.1 302 Found Status: 301 Moved Permanently Pour les urls ré-écrites /produit-ref-123.html HTTP/1.1 200 OK est-ce que Google ne se mélange pas les pinceaux ? Et comment fait-il pour savoir s'il s'agit d'une redirection 301 ou d'une 302 ? Merci par avance!
Jeanluc Posté 12 Avril 2005 Posté 12 Avril 2005 Je viens de lire que la règle RewriteRule ^(.*).html$ $1.php [L] va impliquer une redirection 302, car la 301 n'est pas indiquée explicitement.Pour imposer une redirection 301, il faut rajouter [R=301,L], mais dans ce cas, il faut indiquer une url externe avec http://... Bonjour, Une réécriture d'URL n'implique pas nécessairement une redirection. Dans l'exemple sans l'URL externe, il n'y a aucune redirection; si tu ajoutes l'URL externe, il y a (par défaut) une redirection 302, sauf si tu indiques explicitement R=301. Jean-Luc
Compte supprimé Posté 12 Avril 2005 Posté 12 Avril 2005 Oui, c'est aussi ce que j'avais compris, mais l'exemple m'a quelque peu "embrouillé" RewriteRule ^produit-.*-([0-9]*)\.html$ produit.php?id=$1 [L] Devrait bien se passer.
v2mnet Posté 12 Avril 2005 Auteur Posté 12 Avril 2005 Les règles actuelles du htaccess sont les suivantes : Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)(-.+)-([^-]+)-([^-&]*)([^-]*)\.html$ $1$2&$3=$4$5\.html [N] RewriteRule ^(.*)-([^-]+)-([^-]*)(.*)\.html$ $1.php?$2=$3$4 [L] RewriteRule ^(.*).html$ $1.php [L] pour les urls d'origine du style /produit.php?id=123, j'obtiens : HTTP/1.1 302 Found Status: 301 Moved Permanently Comment modifier les 3 règles pour n'avoir qu'une redirection 301 au lieu d'une 302 (liée à .htaccess) d'abord puis 301 ensuite (liée au code php) ?
Compte supprimé Posté 12 Avril 2005 Posté 12 Avril 2005 - Tu ne doit pas avoir de 301 avec ces regles (normalement juste 200 OK) Donne une url. - Le 301 dut au php, il vient d'ou ??
v2mnet Posté 12 Avril 2005 Auteur Posté 12 Avril 2005 Tu as raison jeroen, je n'ai pas de 301 avec ces regles, j'ai seulement 200 OK. mais seulement pour les urls du type /produit-ref-123.html, Pour les autres "urls d'origine" du style /produit.php?id=123, j'obtiens : HTTP/1.1 302 Found Status: 301 Moved Permanently Mon problème est de savoir si ces 2 redirections successives (302 puis 301) sont nuisibles. On m'a que que oui ... Dans cet esprit, mon idée est de supprimer la redirection 302 qui proviendrait du .htaccess. La 302 proviendrait du .htaccess car si les règles ne précisent pas 301, par défaut c'est 302. Donc je dois rajouter dans ces règles R=301 .... Mais c'est la syntaxe qui coince... Les règles actuelles du htaccess sont les suivantes : Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)(-.+)-([^-]+)-([^-&]*)([^-]*)\.html$ $1$2&$3=$4$5\.html [N] RewriteRule ^(.*)-([^-]+)-([^-]*)(.*)\.html$ $1.php?$2=$3$4 [L] RewriteRule ^(.*).html$ $1.php [L] La redirection 301 vient "probablement" du fichier produit.php lui-même qui commence comme ca : if ( !empty( $_GET['id'] ) ) { header("Status: 301 Moved Permanently"); $url = $_SERVER["REQUEST_URI"] ; $url = str_replace("id", "ref", $url ) ; $url = url_rewrite($url) ; header("Location: $url"); die; } elseif( strpos($_SERVER["REQUEST_URI"], "php" ) !== false) { header("Status: 301 Moved Permanently"); $url = $_SERVER["REQUEST_URI"] ; $url = url_rewrite($url) ; header("Location: $url"); die; } Comment modifier les 3 règles pour n'avoir qu'une redirection 301 au lieu d'une 302 (liée à .htaccess) d'abord puis 301 ensuite (liée au code php) ?
v2mnet Posté 12 Avril 2005 Auteur Posté 12 Avril 2005 Réponse dans Il faut modifier header("Status: 301 Moved Permanently"); en header("HTTP/1.1 301 Moved Permanently"); car le premier renvoie toujours une 302
Compte supprimé Posté 13 Avril 2005 Posté 13 Avril 2005 (modifié) Ok pour le 302. Modifié 13 Avril 2005 par jeroen
Compte supprimé Posté 13 Avril 2005 Posté 13 Avril 2005 (modifié) Question : dans quel cas la deuxième partie de la redirection 301 dans produits.php est elle utilisée ?? Modifié 13 Avril 2005 par jeroen
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant