Htaccess : redirection permanente avec des variables

WRInaute discret
Bonjour,

Suite à la nouvelle version de mon site, mes quelques 1500 URLs ont changé.

Pour ne pas perturber la navigation, j'ai personnalisé la page d'erreur 404. Je voudrais néanmoins créer des redirections.

J'utilise l'URL rewritting et pour cette nouvelle version, j'ai supprimer quelques variables parce que j'avais des URLs un peu trop longues.

Par exemple, l'url http://www.monsite/categorie/rubrique/ [...] /article.html est devenue http://www.monsite/rubrique/article.html

RedirectPermanent fonctionne bien dans mon fichier .htaccess.

Mais je ne peux pas le mettre en place pour les 1500 URLs qui ont changé !

Est-il possible d'utiliser des variables dans
RedirectPermanent comme je les utilise dans RewriteRule ?

Merci pour votre aide. ^^
 
WRInaute discret
Merci pour cette réponse.

Je constate par exemple dans mon navigateur que les pages :

http://www.monsite.com/article.php?id=25 et http://www.monsite.com/article-25.html donnent le même résultat, suite à l'URL rewriting mise en place dans mon htaccess.

La règle de réécriture fonctionne donc bien :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^article-([0-9]+).html$ article.php?id=$1

Mais est-ce bon pour le référencement ?

Est-ce du duplicate content même si j'interdis les robots d'indexer les pages contenant "article.php?id" ? Faut-il en plus une redirection permanente ?
 
WRInaute accro
Comme tes URL ont été indexées dans leur forme non réécrite, il faut en effet mettre en place des redirections permanentes.
 
WRInaute discret
Les URLS indexées par Google sont bien celles réécrites, c'est-à-dire cette en html du type http://www.monsite.com/article-25.html .

Mais les pages http://www.monsite.com/article.php?id=25 et http://www.monsite.com/article-25.html sont toutes les 2 actives dans mon navigateur Web.

Si je comprends bien, je dois mettre en place une redirection de la page http://www.monsite.com/article.php?id=25 vers http://www.monsite.com/article-25.html ? Et ceci est-il vrai pour toutes mes règles de réécriture ?

Dois-je en déduire que dès que l'on met en place une règle de réécriture, il faut l'associer à une redirection permanente ?
 
WRInaute accro
jojohit a dit:
Dois-je en déduire que dès que l'on met en place une règle de réécriture, il faut l'associer à une redirection permanente ?

c'est mieux voir beaucoup mieux mais pas indispensable car google sait faire la difference entre l'url réécrite et l'originale et gere le duplicate. Le probleme vient plus de la navigation, si le lien réécrit vient d'une messagerie, ou d'une boite de tchat par exemple, il y a de forte chance pour que le serveur en l'abscence de REFERER ne renvoie pas l'url réécrite mais l'originale dans le navigateur, ca m'est souvent arrivé surtout chez OHV en mutu, depuis j'ai fais systématiquement des redirections php des anciennes url vers les nouvelles, ca ne demande pas beaucoup de travail et c'est plus stable pour les utilisateurs
 
WRInaute discret
Quelle est la meilleure règle de réécriture pour Google, est-cela tout simplement le code ci-dessous ou dois-je ajouter d'autres éléments ?

RewriteRule ^article-([0-9]+).html$ article.php?id=$1 [L]

Autre question, j'ai toutes mes règles de réécriture à la suite sans flag [L] sauf à la fin de la dernière ligne de réécriture.

Est-ce OK ?
 
WRInaute accro
autant laisser l'ancienne

met des mots clés dans tes urls, c'est devenue incontournable


Code:
<?php 

function format_url( $url, $type = '' ){
$url = preg_replace("`[.*]`U","",$url); 
$url = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$url); 
$url = htmlentities($url, ENT_COMPAT); 
$url = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\1", $url ); 
$url = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $url); 
$url = ( $url == "" ) ? $type : strtolower(trim($url, '-')); 
return $url; 
} 

?>

et ton .htaccess devient

# article.php?id=25
# article-le-titre-de-mon-article_25.html
RewriteRule ^article-([A-Za-z]+)_([0-9]+)\.html$ /article.php?id=$2 [L]

pour l'utiliser:

tu formate le titre
: $titre_reecrit = format_url($titre,$type);

et voici l'url terminé: echo '<a href="article-'.$titre_reecrit.'_'.$ton_id.'.html">Titre article</a>';

et la ca vaut le coup de faire de la réécriture :D :D
 
WRInaute discret
Merci pour cette fonction.

En fait je renseigne déjà l'URL de mes articles dans un champ MySQL car je la veux volontairement parfois différent du titre.

Est-ce impératif d'avoir le flag [L] après chaque ligne de réécriture ou dois-je le mettre qu'après la dernière ligne de réécriture ?
 
Discussions similaires
Haut