Aller au contenu

Sujets conseillés

Posté

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;

}

Posté

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 !

Posté

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 !!

Posté

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!

Posté
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

Posté

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) ?

Posté

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) ?

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...