Vous êtes ici : Dossiers référencement > Techniques de référencement

Membre WebRankInfo ?

S'inscrire Aide

Le guide complet de l'URL Rewriting

Par , mardi 10 mars 2015

Le référencement de sites web dynamiques est l'une des principales sources d'interrogations des webmasters actuels. Après avoir longtemps été un facteur totalement bloquant pour les moteurs de recherche, lsia situation s'est assouplie depuis quelques temps. Cet article aborde la technique de l'URL rewriting qui constitue certainement la meilleure solution pour obtenir un bon référencement des sites web dynamiques.

Article mis à jour le 10 mars 2015, publié initialement le 4 juin 2004

Sommaire

URL Rewrite : introduction

Les sites web dynamiques sont parfois des obstacles pour les moteurs de recherche, mais la situation a plutôt tendance à s'améliorer. Cependant, parfois, certaines pages représentent un réel obstacle pour les robots et il faut intervenir, mettre en œuvre une procédure spécifique, pour faire en sorte qu'un site soit indexé par les « Google et consort ». Parmi les solutions à disposition des référenceurs, celle de l'URL rewriting (ou « réécriture d'URL ») semble la meilleure et, en tout cas, la plus efficace.

Les sites dynamiques génèrent la plupart du temps des pages aux URL longues et complexes, du fait de la présence de variables. Avec des pages dynamiques, un seul fichier permet de créer dynamiquement des centaines ou des milliers de pages. Une fois que la réécriture d'URL est mise en place sur un site, les pages seront accessibles grâce à des URL « propres », que ce soit pour les internautes ou pour les robots des moteurs de recherche.

Ainsi, une page qui était accessible à l'adresse :

http://www.notre-site.com/articles/article.php?id=12&page=2&rubrique=5

sera accessible après URL rewriting à l'adresse (par exemple) :

http://www.notre-site.com/articles/article-12-2-5.html

Ces URL dites « propres » (débarrassées de caractères spéciaux comme « ? » ou « & ») facilitent l'indexation des sites dynamiques, et donc leur référencement dans les moteurs.

En plus de cet avantage indéniable, la réécriture d'URL permet d'intégrer des mots-clés dans l'URL (attention, c'est loin d'être un critère majeur du référencement).

Enfin, elle permet également de renforcer la sécurité du site en masquant les noms des variables passées dans l'URL. Si l'extension des URL « propres » est neutre (par exemple .html ou .htm ou même aucune), il est même possible de masquer le langage utilisé sur le serveur (PHP dans notre exemple).

Principe de l'URL Rewriting

Le principe de la réécriture d'URL est donc de mettre en place un « système » sur le serveur pour qu'il sache interpréter ce nouveau format d'URL. Dans notre exemple, quand un visiteur accède à la page , le serveur doit renvoyer exactement la même chose que si le visiteur avait demandé à accéder à la page .

La correspondance entre les deux schémas d'URL est alors décrite sous forme de « règles de réécriture ». Chaque règle permet de décrire un format d'URL. Dans l'exemple ci-dessus, la règle de réécriture va indiquer au serveur de prendre le premier nombre comme numéro d'article, le deuxième comme numéro de page et le troisième comme numéro de rubrique.

La technique de réécriture d'URL la plus connue est celle disponible sur les serveurs Apache, le plus souvent utilisés avec le langage PHP. Sauf mention spéciale, tous les exemples de cet article seront donc consacrés au langage PHP et au serveur Apache.

Remarque : lisez également l'URL Rewriting pour les débutants, un autre article qui explique les bases de cette technique.

Mettre en place l'URL Rewriting

Si vous avez déjà un site dynamique en ligne, voici les étapes à suivre pour mettre en place la réécriture d'URL :

  1. Vérifier que votre hébergeur permet l'utilisation de l'URL Rewriting
  2. Identifier les pages dynamiques dont l'URL comporte des paramètres, et choisir un nouveau schéma d'URL « propre »
  3. Ecrire les règles de réécriture dans le fichier .htaccess adéquat.
  4. Changer tous les liens vers chaque fichier dont l'URL a changé.
  5. Mettre à jour votre site et vérifier que tout fonctionne.

Ouf... ;-) Voyons maintenant chacune de ces étapes les unes après les autres :

Vérifier si l'URL Rewriting est compatible avec son hébergeur

La première chose à faire est bien évidemment de s'assurer que le serveur qui héberge votre site permet d'utiliser la réécriture d'URL. Tout dépend, dans un premier temps, du type de serveur utilisé. L'objet de cet article n'est pas de passer en revue tous les types de serveurs mais voici un résumé des possibilités de réécriture d'URL sur les serveurs web les plus courants :

Serveur web Support de la réécriture d'URL Détails
Apache Géré par le module mod_rewrite, un module standard d'Apache à partir de la version 1.3.27 Le module mod_rewrite doit être actif :le fichier de configuration d'Apache (httpd.conf) doit contenir cette ligne :LoadModule rewrite_module libexec/mod_rewrite.soainsi que celle-ci :AddModule mod_rewrite.c
IIS (Microsoft) En ASP : réécriture possible par des filtres ISAPI, commercialisés par diverses sociétés (payants). Le paramétrage des règles de réécriture est spécifique à chaque composant.
En ASPX (.NET), sur tous les serveurs supportés : des fonctions sont disponibles comme RewriteURL(), etc. qui prennent en charge la réécriture d'URL. Des codes prêts à compiler pour exploiter ces capacités sont fournis par Microsoft ou via des projets open source comme codeproject.com Aucune méthode standard n'a été prévue pour définir les règles de réécriture mais une utilisation pratique consiste à les paramétrer directement dans le web.config (fichier de configuration de l'application ASP.Net, présent notamment à la racine du site), qui est standardisé en XML.

Si votre site est hébergé sur un serveur dédié, vous avez accès vous-même à la configuration du serveur. Dans le cas d'un serveur Apache, vous pouvez donc modifier le fichier de configuration afin d'activer le support de la réécriture d'URL. Pensez à redémarrer Apache après avoir modifié le fichier de configuration.

Mais ce n'est pas tout. Si votre site est hébergé sur un serveur mutualisé, il n'est pas garanti que votre hébergeur ait activé le support de la réécriture d'URL, principalement pour des raisons de sécurité.

Si votre site est fourni par un hébergeur gratuit, il y a peu de chances que la réécriture d'URL soit possible. Nous vous conseillons fortement d'investir dans un hébergement payant (en plus d'un nom de domaine), les avantages sont réellement nombreux pour effectuer un bon référencement.

Pour vérifier si le module mod_rewrite d'Apache est activé, il vous suffit de suivre les points suivants :

  1. Créez un répertoire nommé test que vous placerez à la racine de votre site (il sera donc accessible via l'adresse http://www.votre-site.com/test/.
  2. Dans ce répertoire, créez un fichier HTML nommé test.html (http://www.votre-site.com/test/test.html) contenant uniquement les lignes suivantes :
    <html><head><title>Test</title></head><body>OK !</body></html>
  3. Dans ce répertoire, créez un fichier nommé .htaccess contenant les lignes suivantes (nous verrons plus loin leur signification) :
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^inconnu.html$  /test/test.html [L]
  4. Transférez ce répertoire et ces deux fichiers sur votre site, puis rendez-vous à l'adresse

Vous vous attendez sans doute à ce que le navigateur affiche un message d'erreur indiquant que le fichier nommé inconnu.html n'existe pas à cet endroit sur votre site (erreur 404). Si c'est le cas, alors votre hébergeur n'autorise sans doute pas la réécriture d'URL : contactez-le pour lui demander.

Si vous êtes chez un hébergeur gratuit qui ne gère pas l'URL rewrite, c'est une très bonne raison pour franchir le cap et bénéficier de tous les avantages d'un hébergement professionnel (qui est désormais financièrement accessible à tous).

Sinon, vous devriez voir le texte « OK ! », ce qui signifie qu'en demandant à voir le fichier inconnu.html (qui n'existe pas physiquement sur le serveur), le serveur vous affiche le contenu du fichier test.html (qui existe bien). C'est le principe même de la réécriture d'URL et donc la preuve que votre serveur gère bien la réécriture d'URL. Il a « réécrit », dans notre cas, « inconnu.html » en « test.html ». CQFD.

Il peut y avoir un troisième cas de figure (que nous ne vous souhaitons pas…) : votre site est totalement bloqué, aucune page ne peut être affichée, et vous avez un message indiquant « Erreur 500 ». Dans ce cas ne paniquez pas, il vous suffit de retirer le fichier .htaccess qui est incompatible avec votre hébergeur.

Définir les formats d'URL

Reprenons notre exemple de site qui dispose d'une base de données d'articles, et dressons la liste des types d'URL. En voici quelques exemples :

  • article.php?id=12&rubrique=5
  • article.php?id=12&page=2&rubrique=5

Pour simplifier la lecture, nous n'avons listé ici que des URLs concernant le même article, mais dans la pratique quand vous essayez de dresser la liste des types d'URL sur votre site, vous pouvez tomber, par exemple, sur :

  • article.php?id=182&rubrique=15
  • article.php?id=36&page=5&rubrique=3

Le principe de l'URL rewriting consiste à trouver les schémas des URL à partir de leurs formes communes. Dans notre exemple, les articles sont accessibles selon deux types d'URL (id+rubrique ou id+rubrique+page), suivant que le numéro de page est précisé ou non.

A partir du moment où vous avez identifié ces « schémas d'URL », vous devez choisir un nouveau format d'URL (l'url « propre »). En général on fait apparaître un nom de fichier avec l'extension .html (ou .htm) mais sachez que vous pouvez mettre ce que vous voulez, cela n'a aucune incidence sur la prise en compte des pages par Google. En effet, quelle que soit l'extension que vous aurez choisie, la page restera une page respectant la norme HTML.

Le nom du fichier sera formé d'un préfixe et/ou d'un suffixe, et des valeurs des variables (que ce soient des chiffres ou des lettres). Profitez de cette étape pour bien réfléchir en fonction du référencement, car vous pouvez utiliser des mots-clés dans les URL de vos pages, qui soient plus parlants pour les internautes et sans doute pris en compte par les moteurs de recherche.

Voici les nouveaux formats d'URL que nous avons choisis pour chacune des URL des exemples précédents :

  • article-12-5.html
  • article-12-2-5.html
  • article-182-15.html
  • article-36-5-3.html

Pour séparer les différentes parties de l'URL, vous devez choisir un séparateur (dans cet article, nous avons choisi d'utiliser uniquement des tirets). Il est plus efficace pour le référencement de choisir un caractère qui soit considéré comme un séparateur de mots par Google. Ainsi, vos URL pourront contenir des mots-clés, ce qui est pris en compte sans soucis par Google.

Je vous conseille d'utiliser prioritairement les caractères suivants :

  • Le tiret : -
  • Le point : .

Vous pouvez également utiliser les caractères suivants :

  • Le plus : +
  • La barre oblique (slash) : /
  • La barre verticale (pipe) : |

Je vous déconseille d'utiliser les caractères suivants :

  • Le tiret bas (underscore) : _
  • La virgule : ,
  • Le point-virgule : ;
  • Le signe dièse : #
  • L'esperluette : &
  • L'arobase : @
  • Le point d'interrogation : ?
  • Le signe dollar : $
  • Les caractères accentués, l'espace (lisez pourquoi il faut éviter ces caractères dans l'URL)

Le tiret et le point sont les plus simples ; la virgule pose parfois problème ; la barre oblique peut poser des problèmes de répertoires et la barre verticale n'est pas très connue des internautes. Le tiret bas (underscore) pose des soucis avec Google (il n'est pas considéré comme un séparateur de mots).

Nous avons donc défini deux formats d'URL pour notre rubrique d'affichage des articles. Essayons de les formaliser en supprimant les numéros d'articles, de rubriques ou de pages, et en les remplaçant par leur signification :

  • article-ARTICLE-RUBRIQUE.html
  • article-ARTICLE-PAGE-RUBRIQUE.html

Bien entendu, ARTICLE, RUBRIQUE et PAGE représentent ici des numéros.

Rédiger les règles de réécriture (rewrite rules)

Maintenant que nous avons déterminé les différents schémas d'URL, il reste à écrire les règles de réécriture qui vont indiquer au serveur comment interpréter chacun de ces schémas.

Passons directement à la solution que nous allons commenter… Voici le contenu du fichier .htaccess situé dans notre répertoire :

#--------------------------------------------------
# Répertoire : /articles/
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

# Article sans numéro de page :
RewriteRule ^article-([0-9]+)-([0-9]+).html$   /articles/article.php?id=$1&rubrique=$2 [L]

# Article avec numéro de page :
RewriteRule ^article-([0-9]+)-([0-9]+)-([0-9]+).html   /articles/article.php?id=$1&page=$2&rubrique=$3 [L]

Remarque : il ne doit pas y avoir de retour chariot sur une ligne de règle de réécriture.

Les lignes commençant par le signe dièse (#) sont des commentaires. N'hésitez pas à en ajouter pour rendre vos fichiers plus compréhensibles : ces lignes sont totalement ignorées par le module de réécriture d'URL.

Chaque fichier .htaccess est spécifique à un répertoire ; nous avons pris l'habitude d'indiquer en haut de ce fichier l'emplacement du répertoire sur le site. Chaque répertoire de votre site devra donc proposer son propre fichier .htaccess.

Les deux premières instructions (Options +FollowSymlinks et RewriteEngine on) ne doivent être présentes qu'une seule fois par fichier, avant toute règle de réécriture.

  • L'instruction Options +FollowSymlinks est facultative mais peut servir dans certaines configurations.
  • L'instruction RewriteEngine on indique que nous souhaitons utiliser le module de réécriture d'URL. Si vous avez un problème avec une règle de réécriture que vous venez d'ajouter, vous pouvez désactiver en quelques secondes la réécriture d'URL le temps de comprendre le problème : il vous suffit d'écrire RewriteEngine off à la place de RewriteEngine on.

La suite du fichier est constituée d'une série de règles de réécriture. Chaque règle est écrite sur une seule ligne (sauf règles complexes) et respecte le format suivant :

RewriteRule URL_A_REECRIRE URL_REECRITE

Explications :

  • RewriteRule est un mot-clé spécifique au module mod_rewrite qui indique que la ligne définit une règle de réécriture.
  • Ensuite vient l'URL à réécrire, c'est-à-dire l'URL « propre » sans existence physique sur le serveur.
  • Enfin vient l'URL réécrite, c'est-à-dire l'URL telle qu'elle sera appelée en interne sur le serveur.
  • Ces 3 éléments doivent être écrits sur une seule ligne, et séparés par un ou plusieurs espaces à chaque fois

Le format de l'URL à réécrire est basé sur les expressions régulières, dont la base devra être acquise pour pouvoir définir des règles de réécriture. Ne vous inquiétez pas, pour la plupart des cas c'est très simple.

Voici la liste des éléments pris en considération dans les règles de réécriture :

Elément Explications
^ Indique le début de l'URL à récrire. Ce caractère est facultatif mais il est plus rigoureux de l'utiliser.
article- Cette partie de l'URL n'est pas utilisée directement. Nous aurions pu écrire art à la place de article. Ce préfixe peut servir à différencier différents schémas d'URL, et il permet à l'internaute de mieux comprendre l'objet de la page.
() Les parenthèses servent à encadrer une variable dont la valeur est récupérée dans la 3ème partie de la ligne.
[0-9]+ Indique que la variable est composée d'un ou plusieurs chiffres.
$ Indique la fin de l'URL à réécrire. Ce caractère est facultatif mais il est plus rigoureux de l'utiliser.
/articles/ Cette partie est parfois facultative (cela dépend de la configuration du serveur). En général il suffit d'indiquer l'emplacement du fichier de manière relative au répertoire dans lequel est situé le fichier .htaccess (donc on peut se passer de cet élément). Sur certains hébergeurs mutualisés (OVH ou Sivit pour n'en citer que deux), vous devez indiquer le chemin complet vers le fichier, à partir de la racine du site, comme dans notre exemple.
article.php Nom du fichier que le serveur doit utiliser pour afficher la page. C'est le nom d'un fichier qui existe physiquement et qui contient un script (PHP dans notre exemple) de gestion de la page dynamique.
? Caractère obligatoire précédant la série de variables passées dans l'URL réécrite.
id=$1 Indique que la variable nommée id prendra la valeur située dans la première paire de parenthèses.
& Caractère utilisé pour séparer 2 variables dans l'URL réécrite.
rubrique=$2 Indique que la variable nommée rubrique prendra la valeur située dans la deuxième paire de parenthèses.
[L] Drapeau (option) signifiant « Last », indiquant au module de réécriture qu'il doit s'arrêter. Plus précisément, si l'URL de la page demandée par le visiteur correspond au schéma défini par cette règle, alors le module de réécriture d'URL ne doit pas examiner les autres règles situées dans le reste du fichier .htaccess. Il n'est pas toujours obligatoire mais il ne fera pas de mal !

Cet exemple de règle de réécriture permet déjà de gérer notre rubrique d'articles, mais il existe d'autres règles plus complexes.

Vous trouverez la syntaxe complète à utiliser dans le fichier .htaccess sur le site officiel d'Apache

Si vous souhaitez en savoir plus à propos du formatage à utiliser pour écrire ces règles :

  • ([0-9]{1,2}) Autorise un ou deux chiffres
  • ([0-9]*) Autorise tous les chiffres, autant de fois qu'on veut
  • (-[a-z]*) Autorise toutes les lettres et tirets, autant de fois qu'on veut
  • etc.

je vous invite à consulter un tutoriel sur les expressions régulières PERL ici par exemple.

Modifier tous les liens internes

Maintenant que nous avons défini les schémas d'URL et créé les règles de réécriture, il reste à vérifier que dans tout le site, tous les liens utilisent le bon schéma d'URL.

En effet, les règles de réécriture du fichier .htaccess ne suffisent pas à ce que tout votre site soit au nouveau format, avec des URL propres ! C'est à vous de changer la façon d'écrire les liens, que ce soit dans des pages statiques ou dans des pages dynamiques.

Faites la même chose si vous utilisez des sitemaps : ils ne doivent lister que les URL au nouveau format.

Bien entendu, vous devez pouvoir sauter cette étape si vous incluez la gestion de la réécriture d'URL dès la création du site, puisque vous aurez pris soin de générer dès le début des liens aux bons formats.

Mettre à jour et tester

Il est temps de tester ! Transférez tous les fichiers modifiés en ligne, y compris le fichier .htaccess, puis rendez-vous dans votre navigateur pour tester si la réécriture fonctionne.

Pour reprendre notre exemple, comparez ce que vous obtenez en allant sur :

http://www.notre-site.com/articles/article-12-2-5.html

et sur :

http://www.notre-site.com/articles/article.php?id=12&page=2&rubrique=5

Vous devriez avoir exactement la même page…

En cas de blocage complet du site (par exemple avec une erreur de type 500), n'oubliez pas qu'il suffit de supprimer le fichier .htaccess (ou d'annuler les dernières modifications) pour que tout revienne dans l'ordre.

Nous vous conseillons d'utiliser un logiciel de vérification des liens à l'intérieur de votre site (vous pouvez par exemple choisir Xenu's Link Sleuth, un logiciel à installer sous Windows, ou pour aller bien plus dans les détails, testez RMTech de ma plateforme My Ranking Metrics). Ce type de logiciel agit comme Googlebot : il parcourt vos pages en suivant tous les liens qu'il trouve. S'il ne trouve aucun lien mort (un lien menant à une page introuvable), alors vous n'avez fait aucune erreur ni dans vos règles de réécriture ni dans vos liens internes. Sinon, corrigez en conséquence. Attention toutefois, ce type d'outil peut solliciter fortement votre serveur : il vaut mieux l'éviter si vous avez un gros site avec des milliers de pages à crawler.

Rediriger les anciennes URL

Votre travail n'est toujours pas fini ! En effet, les anciennes URL fonctionnent toujours, et tous ceux qui chercheront à y accéder (internautes ou robots) ne se rendront pas compte qu'ils ne sont pas sur les URL officielles (celles au nouveau format). Le fait que les anciennes URL cohabitent avec les nouvelles pose des problèmes de contenus dupliqués.

Pour résoudre ce problème et "nettoyer" votre site, il suffit de faire des redirections 301. Pour chaque page, faites une redirection 301 de l'ancienne URL vers la nouvelle (en plus de la réécriture d'URL). Si je reprends un des exemples précédents, :

  • l'URL http://www.notre-site.com/articles/article.php?id=12&page=2&rubrique=5 doit être redirigée en code 301 vers l'URL http://www.notre-site.com/articles/article-12-2-5.html
  • le serveur doit réécrire (en interne, de façon transparente) en http://www.notre-site.com/articles/article.php?id=12&page=2&rubrique=5

Si besoin, consultez mon tutoriel complet qui explique comment faire une redirection 301.

Optimisation du référencement des pages dynamiques

Une fois que vous avez mis en place la réécriture d'URL sur tout votre site, il reste deux étapes pour terminer l'optimisation de votre site (du point de vue du référencement) :

  1. Créer des liens vers toutes les pages.
  2. Optimiser le code de chaque page dynamique.

1. Créer des liens vers toutes les pages

Les sites dynamiques comportent bien souvent un grand nombre de pages. La mise en place de la réécriture d'URL permet une bonne indexation, mais ce n'est pas une condition suffisante pour que toutes les pages de votre site soient indexées. En effet, il est nécessaire de créer les conditions pour que les robots des moteurs puissent accéder à vos pages en suivant les liens présents sur votre site.

  • Si vous avez une rubrique contenant des articles (actualité par exemple), prévoyez une zone d'archives avec des liens vers tous les articles, hiérarchisés de manière chronologique.
  • Si vous avez un forum avec des milliers de discussions, vérifiez que tous les liens qui permettent de naviguer de page en page utilisent le bon format d'URL. Vous pouvez également prévoir là aussi une rubrique d'archives, avec des liens vers tous les forums et toutes les discussions des forums, le tout réparti sur autant de pages que nécessaire (limitez-vous à une centaine de liens par page environ, éventuellement un peu plus).
  • Si vous avez un catalogue de produits, vous avez certainement classé ces produits en catégories, sur un ou plusieurs niveaux. Présentez ces produits sous la forme d'un annuaire qui permet de naviguer dans tout le catalogue avec des liens classiques <a href>. Cet annuaire peut être complété par un moteur de recherche interne, souvent très apprécié des internautes, et compatible bien entendu avec votre catalogue de produits.
  • Une page « Plan du site » adaptée peut également être créée dans cette optique.

2. Optimiser le code de chaque page dynamique

Une page dynamique n'est rien d'autre qu'une page HTML créée sur mesure par un script. En général une telle page repose sur un modèle de page, reprenant le design du reste du site, et comportant certaines zones dont le contenu est généré en effectuant des requêtes dans une base de données.

Il faut optimiser le code de la page HTML pour le référencement de la même manière que pour une page statique.

Nous vous conseillons de prévoir sur toutes ces pages les zones suivantes, à remplir de manière unique pour chaque page :

  • Le titre (balise <title>).
  • Les renseignements sur la page, utiles par exemple aux annuaires et dans une moindre mesure pour les moteurs (balises meta : <meta description> et <meta keywords>).
  • Un titre dans le contenu textuel, en haut de page (balise <h1>).
  • Un texte descriptif qui résume la page, à placer le plus haut possible sur la page (balise <p>).
  • Des liens vers les pages connexes (balise <a>).

Si vous respectez ces consignes, vous disposerez rapidement d'un site dont les milliers de pages seront indexées et toutes optimisées pour le référencement !

Conclusion

Les sites dynamiques sont aujourd'hui de plus en plus courant, car ils apportent une grande souplesse de gestion et permettent d'exploiter de grandes quantités d'information. Même si leur utilisation se démocratise, ils sont aujourd'hui encore bien souvent mal conçus en terme de référencement, puisqu'ils cumulent souvent de nombreux facteurs bloquants (identifiants de session, URL complexes).

La mise en place de la réécriture d'URL est un travail parfois long, complexe et technique, mais qui permet d'obtenir des résultats sans commune mesure avec les sites statiques. Une fois bien mise en place, la réécriture d'URL (associée à une optimisation dynamique des pages) permet bien souvent de positionner le site sur Google ou les moteurs de recherche « du marché » pour des milliers d'expressions plutôt que quelques dizaines comme c'est le cas habituellement avec les sites statiques.

Voir aussi sur WRI

Je vous encourage à lire ces autres articles :

Si vous avez des questions ou des difficultés à mettre en place l'URL Rewriting sur votre site, posez votre question dans le forum URL Rewriting de WebRankInfo ! En effet, les commentaires, trop nombreux, sont désormais fermés.

A propos de l'auteur : Olivier Duffez Olivier Duffez sur Google+ Olivier Duffez sur Twitter Olivier Duffez sur Facebook Olivier Duffez sur Pinterest Olivier Duffez sur LinkedIn

Consultant en référencement, Olivier Duffez a travaillé pour les plus grands sites (Doctissimo, FNAC, RueDuCommerce...). Il édite le site WebRankInfo qu'il a créé en 2002, devenu la + grande communauté francophone sur le référencement (+290.000 membres, 1,5 million de posts). Il a également créé la société Ranking Metrics, leader des formations emarketing en France (SEO, AdWords, Analytics, réseaux sociaux).

Si vous souhaitez publier un extrait de cet article sur votre site, assurez-vous de respecter les conditions générales d'utilisation de WebRankInfo.

117 commentaires

  1. CFP a dit le

    "Transférez ce répertoire et ces deux fichiers sur votre site, puis rendez-vous à l'adresse "
    Au vu de la règle de réécriture, préférez "http://www.votre-site.com/inconnu.html"

  2. Olivier Duffez a dit le

    Je n'ai pas compris la remarque...

  3. CFP a dit le

    Je faisais simplement remarquer qu'au vu de la règle de réécriture, il fallait consulter la page inconnu.html, et non test/inconnu.html.
    CFP.

  4. Olivier Duffez a dit le

    Justement non, la démo donnée dans cet exemple se situe dans le répertoire /test/

  5. blanchat a dit le

    Bravo, merci pour ce cours sur une technique dont on entend de plus en plus parler mais qui peut encore demeurer mysterieuse pour beaucoup. Je m'en vais de ce pas tester tout cela avec mon site de dons d'objets entre particuliers jedonnetout.com. Encore merci !

  6. Goisbault a dit le

    C'est étonnant je suis sur un serveur mutualisé chez 1&1 et j'ai l'erreur 500.... super ! Que puis-je faire d'après vous ?

    Merci.

  7. Sophie de Lagarde a dit le

    Je n'y arrive pas... pourtant mon serveur dit que tout est bon mais quand je crée le repertoire test comme dans le tuto, j'ai une erreur 500 sur le repertoire... et eux ils me disent que ce n'est pas de leur faute, j'ai pourtant recopié tout comme dans le tuto... J'ai vu dans certains forums qu'ils conseillait d'enlever la premier ligne Options FollowSymlinks, dans ce cas je n'ai plus d'erreur, mais pas de redirection non plus...

  8. Olivier Duffez a dit le

    Goisbault et Sophie, le mieux serait de poster un message dans le forum http://forum.webrankinfo.com/url-rewriting.html en donnant l'URL du site, ce sera plus facile pour avoir de l'aide

  9. Christophe a dit le

    Merci pour les explications, c'est vraiment clair.

    Une petite chose : comment limiter cette réécriture à un seul répertoire, au root de mon serveur web mais pas à la partie admin, par exemple ?

    Merci d'avance,

    Christophe

  10. Olivier Duffez a dit le

    Christophe : s'il n'y a pas de fichier .htaccess dans le répertoire d'admin, seules les règles d'un éventuel fichier .htaccess situé plus haut dans l'arborescence (la racine ?) pourraient s'appliquer mais c'est peu probable (ça dépend du contenu de ces règles).
    tu peux aussi désactiver le module de réécriture avec RewriteEngine off comme indiqué sur http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteengine

  11. Steven a dit le

    Wow vraiment merci ca ma vraiment aidé !! Suffit que de comprendre ^^

  12. bouzakher a dit le

    salut,
    est ce que je peut faire cette démarche mais avec ASP classique ??sinon y a il un lien explique le rirwriting et comment mettre en marche avec ASP????
    merci d'avance pour votre aide

  13. Gloubi bulgare a dit le

    Bonsoir Olivier et bravo pour ton excellent travail...

    Moi je rame sur le cas suivant

    Je voudrais rerouter l'adresse toto.com vers tata.org/lola.php en faisant en sorte que l'URL affiché soit bien toto.com et que tata.org soit invisible...

    Après 3 jours d'intenses tentatives, je n'y arrive toujours pas. Pourtant la redirection marche parce que j'ai testé en remplaçant index.php par index.html.

    Merci pour ton aide parce que là j'ai touché le fond :(

  14. Olivier Duffez a dit le

    on ne peut pas faire de redirection tout en voulant garder la même URL, ou alors éventuellement en utilisant des frames (ce que je déconseille)

  15. Ludovic a dit le

    Pour me faciliter la tâche j'ai utilisé un générateur d’URL rewriting, ça m'a fait gagner pas mal de temps.

    http://www.generateit.net/mod-rewrite/

  16. legend83 a dit le

    Bonjour;
    Comment peut on utiliser l'url rewriting, si on a des adresse de ce style:
    ?

    Sachant que $pseudo peut bien entendu prendre différentes valeurs.

  17. fafa42 a dit le

    Le signe = n'ayant pas l'air d'etre interdit, pourquoi l'enlever dans la reecriture?
    Par exemple si on connait le nombre maximum de variables passees a n'importe quel script, les regles successives:
    RewriteRule ^(.*),(.*),(.*),(.*),(.*).html$ $1.php?$2&$3&$4&$5 [L]
    RewriteRule ^(.*),(.*),(.*),(.*).html$ $1.php?$2&$3&$4 [L]
    RewriteRule ^(.*),(.*),(.*).html$ $1.php?$2&$3 [L]
    RewriteRule ^(.*),(.*).html$ $1.php?$2 [L]
    (ici je suppose 4 variables maximum, j'ai ignore le probleme de chemin eventuel)
    remplaceront n'importe quel appel du genre:

    par:

    Ces 4 RewriteRule suffisent alors pour tout le site, sans s'occuper des noms de scripts ou de variables
    (seul le nombre maximum de variables est necessaire pour mettre le bon nombre de regles).
    Y a t-il une contre-indication?

  18. Bill a dit le

    Bonjour,

    Je me permet de vous solliciter car j'ai un problème avec la réécriture des URL sur mon serveur d'application OVH.
    J'aimerai savoir pour quelle raison cette mise en place ne fonctionne pas sur mon compte

    Ci-joint mes exemple en test pour des articles. Tous mes fichiers se trouvent dans le dossier test à la racine.

    J'ai bien créé mon .htaccess, qui contient les lignes ci-dessous et rien ne se passe.
    Merci vraiment pour votre aide.

    #--------------------------------------------------
    # Répertoire : /articles/
    #--------------------------------------------------

    # Le serveur doit suivre les liens symboliques :
    Options FollowSymlinks

    # Activation du module de réécriture d'URL :
    RewriteEngine on

    #--------------------------------------------------
    # Règles de réécriture d'URL :
    #--------------------------------------------------

    # Article sans numéro de page :
    RewriteRule ^article-([0-9] )-([0-9] ).html$ /articles/article.php?id=$1&rubrique=$2 [L]

    Un exemple de lien dans ma page test.php

    OK

  19. y00gi a dit le

    Merci pour ce tuto !

    par contre un point non abordé la redirection de l'index.
    par exemple :
    on ne souhaite pas htttp://www.monsite.com/index.php mais http://www.monsite.com

    on se retrouve pas avec une boucle infini ?
    Merci.

  20. Automobile Sportive a dit le

    Pour Bill,
    Dans ta règle tu n'autorises que un seul chiffre par paramètre.
    RewriteRule ^article-([0-9] )-([0-9] )\.html$ /articles/article.php?id=$1&rubrique=$2 [L]

    Essaye plutôt, comme indiqué dans le tuto :-)
    RewriteRule ^article-([0-9]* )-([0-9]* )\.html$ /articles/article.php?id=$1&rubrique=$2 [L]

    Pour Y00gi,
    Voici le code à utiliser dans ton htaccess pour ta question.
    suivant ton hébergeur, ça devrait fonctionner.

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
    RewriteRule ^(.*)index\.php$ /$1 [R=301,L]

  21. Tristan a dit le

    Bonjour à tous,

    Très bon tutoriel que je viens de tester sur mon site... avec un demi-succès. Je prends l'exemple d'article suivant de mon site :
    http://www.no-spoon.net/article.php?news_id=957

    J'aimerais que l'url soit sous la forme :
    http://www.no-spoon.net/article,chris-pine-jack-ryan,957.html

    Mon htaccess contient donc la règle :
    RewriteRule ^article,([a-z]*),([0-9]*).html$ /article.php?news_id=$2 [L]

    Or, dans mon URL, ça marche uniquement si je retire les tirets, par exemple :
    http://www.no-spoon.net/article,chrispinejackryan,957.html

    Mais si je mets les tirets, j'ai une erreur "Not Found".

    Je pense qu'il doit y avoir une petite erreur dans le ([a-z]*) qui, selon le tutorat autorise toutes les lettres et tirets...

    Merci à tous pour votre aide !

  22. Olivier Duffez a dit le

    ([a-z]*) représente un nombre quelconque de lettres entre a et z mais uniquement les lettres
    dans votre cas vous utilisez aussi des tirets donc ça ne fonctionne pas
    il se pourrait qu'il y ait un jour aussi des chiffres dans cette partie de l'URL
    je vous conseille donc d'utiliser plutôt :
    RewriteRule ^article,(.+),([0-9]+).html$ /article.php?news_id=$2 [L]

    au fait, est-ce indispensable de laisser "article," au début ?

  23. Tristan a dit le

    Olivier

    Merci beaucoup pour votre aide, cela fonctionne maintenant !!!

    Et effectivement, je n'y avais pas pensé, mais il est possible que j'ai des chiffres et pas uniquement des lettres dans le titres...

  24. Jean-jacques a dit le

    bonsoir Olivier,

    je viens de lire votre article sur le rewriting d'url.
    j'ai une question à vous poser :

    Que se passe t-il si on a une url "exotique" fabriquée à partir d'élements provenant d'une base de données par exemple ?
    supposons que l'on a une url du type : article.php?id=12&rubrique=5
    mais que les paramètres 12 et 5 soient exprimés sous forme de variables qui rappatrient ces valeurs d'une base de données.
    la technique de l'url rewriting peut-elle fonctionner ?

  25. Olivier Duffez a dit le

    Je serais tenté de dire "Oui" mais j'avoue ne pas bien avoir compris la situation... Peut-être qu'avec des exemples ça serait mieux ?

  26. Zacharie Pacey a dit le

    Bonjour,

    Merci pour ce tuto très bien fait, très pédagogique (c'est rare à ce point-là !).
    Je suis graphiste, et je commence tout juste à m'autoformer sur les questions de référencement, en m'entraînant sur une page temporaire d'un site que je suis en train de développer.
    Ma question concerne cette page temporaire, qui n'est pas une page dynamique, j'espère être quand même dans le sujet en posant cette question ici.
    L'adresse est
    Pour éviter que les moteurs indexent à mon insu 2 adresses distinctes pour ce même site, j'ai déjà mis à la racine du site le fichier .htaccess suivant :

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^compagnielesenfantsperdus.fr$
    RewriteRule ^(.*) [QSA,L,R=301]

    Je voudrais compléter cette instruction pour que l'adresse soit elle aussi, et pour la même raison (éviter un éclatement de l'indexation), réécrite en http :// www. compagnielesenfantsperdus .fr
    Or j'estime ignorer encore trop de la synthaxe pour faire cohabiter, à la suite, ces deux instructions de réécriture sans risquer un plantage. Pourriez-vous m'aider ?

    En vous remerciant par avance,
    Zacharie

  27. Olivier Duffez a dit le

    peut-être que la réponse indiquée dans l'article http://www.webrankinfo.com/dossiers/debutants/erreurs-duplicate-content vous suffira, sinon posez la question dans le forum !

  28. ergonoweb a dit le

    Bonjour,

    Après avoir utilisé ce tuto pour débuter en urlrewriting, je reviens après quelques expériences positives mais avec beaucoup de cheveux en moins rectifier une chose : apparemment le flag [L] ne dit pas au moteur de cesser la réécriture, il dit de ne plus continuer la liste des règles de réécriture, mais le moteur reprend alors au début avec l'url modifiée.

    Il y aurait apparemment des astuces pour éviter cela, si ça peut servir à quelqu'un...

    http://www.developpez.net/forums/d553629/webmasters-developpement-web/serveurs-apache-iis/apache/url-rewriting-flag-last-l-ne-fonctionnant/

    Bon travail,

    Maxime

  29. Thibs a dit le

    Voici pour info un article à ce propos

    La particularité est qu'il y a une explication pour mettre à jour les moteur de recherche avec une redirection 301

  30. stone a dit le

    Bonjour,

    Génial, tout fonctionne par contre vous dites qu'après avoir validé l'url rewriting il faut interdire l'accès aux anciennes url en faisant des redirections 301,
    par exemple rediriger http :// www .intoxitation .com/ index.php ?page=modules/index
    vers
    http :// www .intoxitation .com/
    mais je ne vois pas comment faire ?

    pouvez-vous nous expliquer en nous donnant un exemple ?
    merci

  31. Olivier Duffez a dit le

    je te conseille de lire ces conseils sur les redirections 301

  32. Thibs a dit le

    Hello Stone,

    J'avais laissé une explication sur à propos de ce que tu cherches à faire.

    $RewritedNewsTitle=RewritedURI('art',$NewsIDdb,$NewsTitle); //Tel que ça devrait être
    $titlerewrited=substr($_SERVER['REQUEST_URI'], 1); //Tel que reçu
    if (strcmp($titlerewrited,$RewritedNewsTitle)) {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $base_url/$RewritedNewsTitle");
    exit;
    }

    Suite le lien pour voir comment j'avais fait ma fonction RewritedURI

  33. Mohamed TAGGAZI a dit le

    Bonjour,

    C'est bien, mais il y a une grande et célèbre faille :

    la page s'affiche et tout va bien, mais lorsqu'on met 956 au lieu de 957, le contenu de la page se change
    mais le titre dans la barre d'adresses ne se change pas !!!

    cette faille n'as aucun effet sur le référencement du site, mais n'est pas ergonomique.

  34. Thibs a dit le

    Hello,

    J'ai pallié ce problème.

    Regarde http ://www .graphivore .be/les-auteurs-dupuis-dargaud-lombard-a-la-40eme-foire-du-livre-de-bruxelles-news-3051.html et change 3051 par 3050 par exemple ... et bien tu verras que l'adresse change dans la barre d'adresse.

    Regarde le post juste au-dessus du tien et j'explique comment j'ai fait

  35. Wisevolk a dit le

    Bonjour,
    juste une petite précision ou confirmation concernant le rewrite, la directive AllowOverride doit bien être sur All ou il y a un autre moyen ? Si non le rewriting crée-t-il une faille de sécurité ?
    Merci

  36. Sun Location vacances a dit le

    Bonjour,

    Existe-t-il une solution équivalente à RedirectMatch avec un FLAG [L] ....

    En fait, je souhaiterais redirigé une url réécrite vers une autre URL réécrite... Et le redirectMatch ne s'arrête pas ...

    Cordialement,

  37. Mario a dit le

    Bonjour,
    Mon blog WordPress est encore en local, sur www Easyphp 3. J'ai voulu tester le changement de permaliens. J'ai appliqué les consignes de ce tuto, rien n'y faire, j'ai toujours l'erreur 404 même pour le fichier inconnu.html (de l'exemple ci-dessus). J'ai vérifié dans le fichier httpd.conf mais il n'y pas de :
    LoadModule rewrite_module libexec/mod_rewrite.so

    ainsi que celle-ci :

    AddModule mod_rewrite.c
    J'ai voulu ajouter dans la liste des modules du fichier htppd.conf :
    LoadModule rewrite_module libexec/mod_rewrite.so
    mais cela provoque une erreur et la fermeture du serveur.
    Comment faire ? Merci pour votre aide.
    mario

  38. Moog a dit le

    Bonjour à tous,
    J'ai une expression reguliere qui fonctionne presque
    RewriteRule ^blabla/blibli/([0-9])/([a-z0-9-])\.html$ mapage.php?id=$1&cat=1 [L]

    mais la valeur id doit valeur ente 0 et 9 seulement, donc dans le cas ou je passe une url avec un id=10 par exemple :

    blabla/blibli/10/test.html

    mon id sera = 1 et non pas à 10

    J'ai essayé de rajouter un signe

    RewriteRule ^blabla/blibli/([0-9] )/([a-z0-9-])\.html$ mapage.php?id=$1&cat=1 [L]

    mais je me retrouve inévitablement sur une page blanche qui me laisse songeur depuis des heures ...
    Y aurait il une bonne âme pour m'aider ??

    Merci
    Moog

  39. Mohamed TAGGAZI a dit le

    @Moog :
    essaie cette expression :
    RewriteRule ^blabla/blibli/([^-] )/.*\.html$ mapage.php?id=$1&cat=1 [L]

  40. Thibs a dit le

    Mario : Je ne suis pas certain de ce que je dis mais à te lire j’ai l’impression que le module de rewriting n’est carrément pas disponible avec ton hébergement.

  41. Mat a dit le

    Dans la liste des séparateur conseillé vous avez indiqué "La barre verticale (pipe) : |"

    Je la déconseille fortement, internet explorer la convertir en | et google index les pages avec le | et le |
    En plus de dupliquer l'url, ce n'est pas fort clair pour l'utilisateur.

  42. Olivier Duffez a dit le

    Désolé mais le commentaire est sans doute mal passé, je n'ai pas compris le pb car je ne vois pas en quoi | a été converti ?

  43. Mat a dit le

    Defait, le code exa a été convertir automatiquement lorsque j'ai posté le message...

    Le | est convertit en % 7 C (sans espaces)

  44. arena a dit le

    Bonjour,

    j'ai utilisé vos quelques conseils et tout fonctionne à merveille.

    petite question subsidiaire, comment conserver l'url d'origine dans la barre d'adresse su browser plutôt que de voir s'afficher l'adresse traduite ?

  45. Olivier Duffez a dit le

    @arena : l'objectif est de ne plus jamais avoir dans la barre d'adresse les URL à l'ancien format (celui avec le point d'interrogation). Il faut donc (en plus des règles de réécriture) mettre en place des redirections (permanentes 301) de chaque ancienne URL vers la nouvelle équivalente.

  46. arena a dit le

    @olivier
    merci mais je n'arrive pas à ce que je souhaite.

    Voilà, j'ai un lien 'a' que je modifie en 'b' par un bout de code php
    Dans mon .htaccess, je traduis 'b' en 'a' pour servir la page html ad-hoc.
    L'adresse qui s'affiche dans la barre d'adresse du browser est 'a' et je voudrais que ce soit 'b'.
    Est ce possible ?

  47. Olivier Duffez a dit le

    On ne va pas y arriver sans un exemple réel. Par ailleurs ce serait plus pratique d'en discuter dans le forum URL Rewriting, non ?

  48. Sylvain a dit le

    Bonjour à tous,

    j'ai une problématique à vous soumettre :
    J'ai des urls générées par un outil de gestion de contenu, en fonction d'une arborescence.
    Mon problème est que certaines de mes urls sont composées de cette manière :
    -http://www.monsite.fr/acces/rep/rep/moncontenu.xxx

    Comment puis-je supprimer avec la réécriture apache un des niveau "rep" pour avoir une url :
    -http://www.monsite.fr/acces/rep/moncontenu.xxx

    J'ai cherché avec les rewriterules et rewritecond, mais je n'ai pas réussi...

    Merci d'avance pour vos lumières !!!
    Sylvain

  49. Mexico Rentals a dit le

    Bonjour Olivier et à tous.

    Mon site est en 4 langues et fonctionne essentiellement avec des ?... Après avoir lu et à peu près tout essayé, est-il encore vraiement utile de nos jours de réécrire les url?

  50. Olivier Duffez a dit le

    Oui je pense que c'est mieux en général, mais il peut y avoir des cas particuliers. Si les URL sont trop compliquées ça vaut largement le coup.
    Peut-être pour une prochaine mise à jour ?

  51. Fanf a dit le

    Bonjour,
    Tout d'abord merci pour ce tuto qui semble vraiment accessible !
    Je n'ai qu'une remarque : moi, je n'y arrive pas !
    Le test marche bien avec inconnu.html c'est au passage à l'application sur mon site que ça coince :

    Mes URLs sont du type :

    index.php?action=jour&ville=NANCY&menu=edit&select=1

    J'aurai souhaité quelque chose comme :

    article/jour-nancy-1

    ou
    index.php?action=detail&id=12392&menu=edit&select=1
    article/detail-12392-edit-1

    Je ne sais pas trop..
    Mais je n'arrive pas à écrire mes règles de rewriting..
    Si quelqu'un a le temps et la patience de m'indiquer comment penser et faire ça.. :) Merci beaucoup !

    L'ensemble de mes URLs sont comme suit :

    index.php?action=jour&ville=NANCY&menu=edit&select=1
    index.php?action=detail&id=12392&menu=edit&select=1
    index.php?action=rubrique&rub=CLASSIQUE&menu=rub&ville=NANCY
    index.php?action=detail&id=12079&menu=rub&rub=CLASSIQUE

  52. Olivier Duffez a dit le

    Il faudrait nous expliquer dans quels cas tes variables ville, menu et select sont indispensables

    Sinon essaie un truc du genre
    RewriteRule ^([a-z]+)-([0-9]+)-([a-z]+)-([0-9]+)$ index.php?action=$1&id=$2&menu=$3&select=$4

  53. Fanf a dit le

    Je dirai que ces variables le sont toujours, indispensables, le site est sur 5 villes, le menu peut changer et le select également.

    Par contre, après essai, cela ne marche tout de même pas.
    Je peux vous donner l'adresse de mes test ? -http://www.spectacles-publications.com/test/index.php?action=jour&ville=NANCY&menu=edit&select=1

  54. Fanf a dit le

    En fait... cela fonctionne presque, mais j'aurai besoin d'une dernière lumière..

    Voici par exemple le . htaccess mis en place :

    RewriteEngine On
    RewriteRule ^action/([^/]*)/ville/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?action=$1&ville=$2&menu=$3&select=$4 [L]

    RewriteRule ^action/([^/]*)/([^/]*)/([^/]*)/rub/([^/]*)/ville/([^/]*)\.html$ /index.php?action=$1&id=$2&menu=$3&rub=$4&ville=$5 [L]

    Et le résultat : -http://www.spectacles-publications.com/action/detail/11354/rub/rub/SAISONS/ville/STRASBOURG.html
    qui devrait donner :
    -http://www.spectacles-publications.com/index.php?action=detail&id=11354&menu=rub&rub=SAISONS&ville=STRASBOURG

    D'où vient cet affichage qui ne suit pas, quand les infos sont bien sur la page ? :(

    Merci beaucoup par avance.
    Rendez-vous en décembre pour votre formation Lyonnaise :)

  55. Olivier Duffez a dit le

    Pour créer les bonnes règles de réécriture, il faut d'abord décider des nouveaux formats d'URL, et donc de la logique de l'architecture du site.
    Difficile d'aider sans en savoir un peu plus sur le site.

    Par exemple, j'ai l'impression qu'il serait logique de réfléchir en premier lieu aux villes, donc a priori toutes les URL pourraient être sous la forme /{ville}/

    Ensuite il faut réfléchir au 2ème niveau de filtrage d'accès aux données. Est-ce l'action ? Dans ce cas les URL auraient toutes un format du style /{ville}/{action}
    Inutile alors de faire apparaître un mot comme "action" dans l'URL.

    On aurait par exemple des URL de ce genre :
    /strasbourg/ : page d'accueil pour cette ville
    /strasbourg/festivals/ : page des festivals de cette ville (action=festivals)

    etc.

  56. Fanf a dit le

    Effectivement, vous avez raison ce serait bien plus logique.. Je vais essayer de mettre quelque chose en place en ce sens, et bien rélféchir au schéma à utiliser.

    Merci beaucoup

  57. freex a dit le

    Bonjour,

    Moi j'ai suivi l'exemple et j'ai une erreur 500. Ceci dit je possède mon propre serveur. Que puis-je faire pour que le test fonctionne ?

  58. Thibs a dit le

    Hello Freex,

    Ton erreur est très probablement dans ton fichier .htaccess

    Vu que tu as ton propre serveur, tu as certainement accès aux logs d'erreurs d'Apache. Dis nous ce que tu vois là-dedans.

    Thibs

  59. Tom a dit le

    Merci pour le tuto, il m'a été fort utile.

  60. yann a dit le

    Bonjour,
    j'ai un soucis de compréhension je comprends le principe et le résultat est là, sauf que pour moi ça marche à l'envers.

    RewriteRule ^([0-9]+)$ [L]

    quand je tape (par ex: /3) il m'écris l'adresse avec les variables. C'est à dire qu'il par de l'adresse propre vers celle que je voudrais changer pourtant il me semble avoir suivi la méthode?

    Merci à vous.

  61. Olivier Duffez a dit le

    @yann : essaie d'utiliser une URI relative, c'est-à-dire qui ne commence pas par http. Un truc du style :
    RewriteRule ^([0-9]+)$ /lyrics.php?lyrics=$1 [L]

  62. yann a dit le

    merci olivier pour ta rapidité,
    j'ai essayé, aussi, et dans ce cas, les deux adresses existent mais il n'y a pas de redirection vers l'adresse "propre".

  63. Olivier Duffez a dit le

    C'est normal qu'il n'y ait pas de redirection, on cherche simplement à faire une réécriture d'URL.
    A toi de te débrouiller pour :
    - remplacer tous les liens vers les URL à l'ancien (par des liens vers les URL au nouveau format)
    - rediriger en 301 toute ancienne URL vers son nouveau format associé

  64. yann a dit le

    Ok d'accord,
    en tout cas la réécriture est bien réalisée avec l'url relative.

    j'avais pas compris qu'il fallait faire une redirection en 301 !
    Encore merci Olivier !!

  65. fred a dit le

    Bonsoir,

    Mon url est formé de la façon suivante :
    monsite.fr/?page=34&art=2

    Pouvez vous me dire si cette façon de rewriter est correct et quel est le lien pour tester ce rexrite.
    RewriteRule ^article-([0-9]+)-([0-9]+)\.html$ ?page=$1&art=$2 [L]

    Merci d'avance.
    Fred

  66. fred a dit le

    C'est bon..
    Merci pour votre tuto. Du bon boulot!!
    Fred

  67. Olivier Duffez a dit le

    fred, dans la dernière partie il faut indiquer le nom du fichier script à utiliser
    apparemment ce serait un truc du genre index.php, c'est ça ?
    ça donnerait RewriteRule ^article-([0-9]+)-([0-9]+)\.html$ index.php?page=$1&art=$2 [L]

  68. fred a dit le

    merci olivier,

    Le rewrite fonctionne!
    J'ai laissé le code :
    RewriteRule ^article-([0-9]+)-([0-9]+).html$ /?page=$1&art=$2 [L]
    sauf que j'ai placé le fichier .htaccess à la racine de mon site, au niveau de l'index et non au niveau des pages.(->index.php # pages/article.php)
    - Voyez vous un problème à cette méthode? (je pense que non)

    ->Je me demande aussi si il est nécessaire d'indiquer des balises head dans les pages (par exemple article.php) car de toutes façon la page index.php le fait et reprend toutes les pages avec require. (switch ($page)){
    case 34:require_once('pages/article.php')
    ;

    Merci

  69. Olivier Duffez a dit le

    Sans connaître le site je ne peux pas répondre. Ce serait plus efficace de poser ces questions dans le forum URL Rewriting, merci d'avance !

  70. BbWebConsult a dit le

    L'url rewriting est un facteur important dans le référencement.
    Merci pour ces bons conseils.

  71. Jay-rome a dit le

    Bonjour, et merci pour ce tutoriel très instructif.
    J'ai lu les nombreux commentaires, mais sans parvenir à trouver un début de solution à mon problème:
    Mon site est sous la forme : -http://www.monsite.org/joomla-1.5.7.new/rubrique/article.htm

    Je souhaite supprimer la partie "joomlaxxx" via une réécriture d'URL. Comment procéder?

    Merci :)

  72. Le guide a dit le

    Bonjour,
    Donc d'après ce que j'ai compris dans l'article, il faut appeler les pages avec le nouveau format ?? ce qui signifie qu'il faut modifier le code du site ??
    Ou est-ce qu'en appelant les pages dans le format URL_A_REECRIRE, vont-elles s'afficher en URL_REECRITE ?
    Merci.

  73. Olivier Duffez a dit le

    @Le guide : oui, toutes les pages doivent être consultées avec le nouveau format. Cela signifie aussi qu'il faut que tous les liens internes pointent vers les nouvelles URL (il faut donc mettre à jour tous les liens).
    Pour répondre précisément à la question, si on appelle URL_A_REECRIRE, il ne faut pas qu'on soit redirigé vers URL_REECRITE. Dans le navigateur, l'internaute doit rester à l'adresse URL_A_REECRIRE

  74. gg4a a dit le

    Bonjour tout le monde,
    Je viens d'ouvrir une boutique en ligne. J'ai demandé a mon hébergeur d'installer le SSL pour les pages contenant des info sensibles, pourtant toutes les pages de mon site sont actuellement https://. Alors est ce que quelqu'un de ce forum pourra m'aider à reparametrer mon certificat? y a-t-il un code à mettre dans .htaccess?
    Merci beaucoup

  75. Olivier Duffez a dit le

    Mieux vaut poser la question dans le forum, par exemple celui sur l'administration d'un site ou sur le développement web

  76. Subaqua a dit le

    Bonjour à tous,
    J'ai un pb avec la réécriture des URL. Je prends l'ex. mentionné en haut de la page. Si je mets mon .htaccess dans mon répertoire racine, cela ne fonctionne pas. Si je le mets dans le répertoire "test", cela fonctionne.
    2nd pb : l'URL REECRITE apparaît sous sa forme URL A REECRIRE dans la zone d'adresse lorsque la page à afficher n'est pas enregistrée dans le même répertoire que le .htaccess. Pourtant, le Rewriting a fonctionné car la page s'affiche.
    Je planche dessus depuis plusieurs jours et heures sans trouver. Quelqu'un a une idée ?
    Merci d'avance.

  77. Gfa.net a dit le

    Merci beaucoup pour ce tutoriel très bien expliqué et très complet (à mon goût).
    Heureusement qu'il est précisé qu'il faut modifier les liens de son site après l'url rewrite car j'avais déjà essayer mais sans succès et je comprend pourquoi maintenant (google est notre amis mais n'explique pas toujours les petits détails ^^).

    Bonne continuation

  78. atif a dit le

    Merci beaucoup pour votre article M.DUFFEZ

  79. Thomas a dit le

    Bonjour
    une solution propre et simple est expliquée ici : http://jannaud.fr/htaccess-clean-url-strip-slash
    J'aurai mis des heures à trouver comment faire !! La galère pour avoir des url propres, maintenant c'est fait ! :)

  80. grepillez a dit le

    bonjour,

    super cette initiation à l'URL rewritting!!

    moi je souhaite faire en sorte que depuis toutes les pages, l'url général (monsite.fr) apparaisse...
    est ce possible?
    merci d'avance !!

  81. Olivier Duffez a dit le

    @grepillez : donne-nous l'adresse de ton site ou mieux, crée une nouvelle discussion dans le forum URL Rewritting

  82. sefora a dit le

    Bonjour,
    Merci pour ce tutoriel très bien fait. Je me réjouis de le tester.
    Ce que je ne comprends pas, c'est que j'ai construit récemment deux sites, de la même identique façon, chez le même hébergeur.
    Sur l'un (www.art-peinture.ch/photos/) les URL sont propres, sur l'autre (www.la-nature-en-peinture.com/it/) pas du tout. Pourtant, sur le premier je n'ai absolument rien fait pour les nettoyer ! Tant mieux pour moi, mais je me pose des questions...

  83. kamal a dit le

    bonjour
    j ai un problème dans mon site quand je veux accès au le lien suivant :

    j accéder pas mais après modifier les dernier lettre comme ça :
    http :// gsjulesferry .net/ triadev1/acces_depart.php?saisie_membre=eleve&saisie_titre=ElEves
    j accéder avec sucée je supprime le (8) et (%)
    le problème que je veux savoir comment réparer cette erreur noter que mon site et héberger dans un serveur canadien
    merci d avance cordialement

  84. Coletta a dit le

    Bonjour,

    j'ai une petite colle sur le rewriting...

    J'ai hebergé mon site wordpress sur le serveur d'un ami. J'ai donc une adresse www .serveur-ami .com/wordpress/titre-des-articles.html

    J'ai acheté un nom de domaine http://www.monNOM.com et sur l'admin, on me propose la redirection par Frame ou Html. Par html, ça ne change rien, et par Frame, je masque bien l'adresse mais sur toutes les pages je perds le titre des articles.

    Vous vous en doutez je voudrais bien www .monNOM .com/titre-de-mes-articles/

    comment faire?? je ne trouve aucune info :/
    si vous pouvez m'éclairer un peu..

    Merci à vous.

  85. Olivier Duffez a dit le

    Il faut que le site soit hébergé avec son nom de domaine, donc pas de pseudo redirection par frame ou HTML.
    Chez le registrar qui a vendu le nom de domaine, il faut configurer les DNS sur serveur qui héberge le site.

  86. Coletta a dit le

    @olivier merci. dommage qu'il n'y ait pas plus simple. jvais essayer ça.

  87. simon62 a dit le

    j'ai cette variable à passer : $id_negociateur=901_451755

    Que mettre en RewriteRule?
    Une variable avec que des chiffres fonctionne, c'est le _ qui bloque l'accès.

  88. nettlebay a dit le

    Bonjour,
    Je viens de découvrir l'URL rewriting et ça me semble bien compliqué mais pas insurmontable. J'ai fait le test avec "http://www.nbbc.fr/test/inconnu.html". Ça a fonctionné du premier coup (je suis sur un serveur mutualisé chez Sivit par Nerim).
    Mais de là à aboutir à ce que je veux faire...
    Voilà mon problème: j'ai installé une nouvelle Camera IP, une D-LINK DCS-2121. Les images sont actuellement uploadée sur les serveurs de weatherundergroud.com, c'est gratuit et surtout, les noms de mes images qui sont normalement du genre "image20111022_144116.jpg" sont réécrits en "http://icons.wunderground.com/webcamramdisk/n/e/nettlebay/3/current.jpg". Malheureusement, les images sont mises à jour en fonction de la charge des serveurs, cela peut varier de 2 à 6 mn, ce qui n'est pas très satisfaisant. En effet, si mon ancienne Netcam (DCS-900) avait la faculté d'écraser (overwriting) la précédente image (image.jpg par exemple), la nouvelle cam attribue automatiquement un nouveau nom à chaque fois genre "image20111022_144116". Mon idée serait donc d'utiliser l'URL Rewriting pour renommer automatiquement chaque image en "image.jpg" et en écrasant la précédente. Donc ma question est: Est-ce possible? Je précise que je peux seulement changer le mot "image" et le changer en "image.jpg-" (par exemple). Je ne peux pas modifier le tiret bas entre 20111022 et 144116. Le même problème se pose pour les vidéos. Il faut aussi savoir que la Netcam crée aussi des dossiers automatiquement à l'intérieur du dossier "webcam" ce qui ne facilite pas les choses! Je pense tout de même qu'il doit y avoir une possibilité puisque Weatherunderground le fait bien...
    ("http://nbbc.fr" est actuellement en maintenance mais fonctionne. Seule la page index.html est redirigée sur le blog du même nom)

  89. nettlebay a dit le

    Juste pour m'abonner à la discussion (j'avais oublié de cocher)

  90. Olivier Duffez a dit le

    Mais au fond, pourquoi vouloir faire de la réécriture d'URL sur les noms de ces images ?

  91. nettlebay a dit le

    Bonjour!
    A vrai dire, je n'en sais rien... Une idée comme ça...
    Je me suis peut-être mal exprimé et emmêlé en parlant de wunderground...
    En fait, wunderground ne fonctionne pas bien parfois. C'est une solution provisoire. Je voudrais donc utiliser la même solution que pour la DCS-900, c'est-à-dire envoyer les images sur mon serveur FTP (sur Sivit.fr). Mais le fait qu'elles soient nommées à chaque fois différemment et dans un dossier différent (1 par heure)et non écrasées m'empêche d'exploiter mes images pour les afficher sur un site web.
    Pour l'instant, j'ai contourné le problème: les images sont directement chargées sur le serveur de la Camera avec une adresse de type //user:password@xxxx.dyndns-xx.com:80/image/jpeg.cgi et ça fonctionne très bien. Le mot de passe est un simple compte utilisateur qui ne permet pas d'accéder à l'administation de la cam. Cependant, je suis un peu inquiet de cette solution au cas où un "petit malin" remonterait par exemple à la vidéo (pas très difficile même si mes images ont une "short URL"), il pourrait mettre "à genoux" ma connexion facilement (512 kbs).

  92. John a dit le

    Bonjour,

    Peut-on réécrire les liens de news avec le titre de la news au lieu de l'ID ?

  93. Olivier Duffez a dit le

    Oui, la preuve avec les URL des mes dossiers, celui que tu es en train de lire par exemple. Bien entendu il faut définir un "titre" unique à passer dans l'URL

  94. Olivier Duffez a dit le

    Plutôt que de vouloir gérer la langue en traduisant les URL, je conseille de créer un sous-domaine pour la langue anglaise, ou bien un répertoire à la racine (/en/) même si ce dernier est virtuel (via la réécriture d'URL donc).

    Quel est le CMS qui génère ces lignes de réécriture dans le .htaccess ?

  95. totomat a dit le

    En fait nous n'avons pas utilisé de CMS, ça a été fabriqué entièrement à la main (pas par moi pour cette partie).
    Sur ce site, le problème est que pour les pages traduites, ce ne sont pas pas des pages différente mais lorsque l'on clique sur les langues, c'est le contenu texte qui est traduit...
    Qu'entendez vous par créer un fichier virtuel /en/?

    Et pensez vous que ce serait réellement mieux pour le référencement d'avoir canyoneering à la place de canyoning/?lang=en ?

    Encore merci d'avance

  96. totomat a dit le

    Bonjour,
    j'aimerais réecrire l'url en cette URL:
    http ://www .vertical-aventure .com/canyoneering

    Le fichier htaccess icnital est comme ceci pour la partie réécriture:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{QUERY_STRING} &?lang=([^&]+)
    RewriteRule (.*)$ index.php?params=$1&lang=%1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*)$ index.php?params=$1 [L]

    J'ai donc ajouté:
    RewriteRule ^canyoneering$ /canyoning/?lang=en [L]
    Mais cela n'a rien donné.

    Avec vous une idée sur la démarche à suivre?

    Merci d'avance

  97. Olivier Duffez a dit le

    Pour avoir des réponses précises et détaillées, mieux vaut créer une discussion dans le forum : ce sera nettement plus efficace qu'ici.

    Je suggère de mettre toute la version anglaise du site dans un répertoire, par exemple "en", situé à la racine du site. S'il n'existe pas physiquement, on peut le simuler avec la réécriture d'URL.

  98. totomat a dit le

    Ok je vais faire une nouvelle discussion dans le forum
    encore merci pour ces réponses

  99. zadoner a dit le

    Bonjour à tous et merci beaucoup pour cette bonne entrée en matière sur l'URL rewriting. J'ai parcouru aussi bon nombre des commentaires sans pour autant trouver réponse. Bref, j'aimerais faire quelque chose qui ne me parait pas trop compliqué, à savoir modifier par exemple :
    "produit.php?id_produit=23" par "savon-de-marseilles.html" ou alors "liquide-vaisselle.html" avec une seule règle qui irait prendre non pas l'id du produit mais le remplacerait par son titre qui figure en base de données.

    Tous mes produits sont stockés en base de données avec par exemple dans la table "produit"
    id_produit > 23
    titre_produit > savont de marseilles

    Si quelqu'un peu m'orienter, ce serait vraiment sympa ;)
    Cordialement,
    David

  100. Olivier Duffez a dit le

    Dans le répertoire concerné, il faut faire une règle de réécriture du genre
    RewriteRule (.+)\.html$ produit.php?nom_url=$1 [L]

    Ensuite dans produit.php, tu récupères la valeur de nom_url et tu cherches dans ta table "produit" le produit qui a ce nom_url
    Tu peux éventuellement créer un champ nom_url dans ta table pour éviter de le reconstruire à chaque fois à partir du titre.

    Attention aux problèmes que tu rencontreras avec :
    - les URL demandées qui ne correspondent à aucun produit
    - les produits qui changent de titre (quid de leur URL)

    En espérant t'avoir aidé !

  101. craz a dit le

    Bonjour ...

    J'ai passé toute mon après midi à essayer de comprendre et d'utiliser l'url Rewritting mais apparemment je suis à coté de la plaque donc je viens pour solliciter votre aide en vous remerciant par avance.

    Voilà le contenu de mon .htaccess qui est placer dans le répertoire /site/inc/nav/home

    #---------------------------------
    # Repertoire /inc/nav/home/
    #---------------------------------
    
    Options +FollowSymlinks
    RewriteEngine on
    #SetEnv REGISTER_GLOBALS 0
    
    #---------------------------------
    # Règles de réécriture d'URL
    #---------------------------------
    
    RewriteRule ^accueil.html$ index.php?id=home&page=accueil.html [L]

    J'ai bien réussi à utiliser de l'URL Rewritting avec le test au début mais je n'ai pas réussi à l'adapter.

    Donc via mon .htaccess du dessus, je souhaite que dans la barre d'adresse on voie : accueil.html au lieux de id=home&page=accueil.html.

    Il s'agit d'un test, pour valider le fonctionnement et ensuite je le déploie au reste du site ^^.

    Par exemple pour oracle : oracle-preparation au lieux de id=oracle&page=preparation.

    Merci à quiconque m'apporte de l'aide j'en peut pus lol.

  102. Olivier Duffez a dit le

    Il se passe quoi quand tu vas sur l'URL /accueil.html ?

  103. craz a dit le

    Salut, merci pour la réponse et désoler du temps de ma réponse :

    Réponse : The requested URL /site/inc/nav/home/index.php was not found on this server.

    Et effectivement mon index.php se situe à la racine du site. Je ne comprend pas ;(

  104. Olivier Duffez a dit le

    Je n'ai pas compris, le fichier /site/inc/nav/home/index.php existe-t-il vraiment ?

    Sinon, je te conseille de créer une discussion dans le forum .htaccess et URL Rewriting car ici dans les commentaires ça sera difficile de bien t'aider. Merci d'avance.

  105. manucc a dit le

    Bonjour,

    Est-il normal qu'ayant activé la réécriture d'URL sur son site depuis plusieurs mois que je me retrouve actuellement avec les 2 jeux de page sur Google alors que je ne devrais plus avoir que les pages réécrites ?
    D'avance merci de votre retour.

  106. Olivier Duffez a dit le

    @manucc : oui c'est normal, les anciennes URL fonctionnent encore. Il faut les rediriger (à ne pas confondre avec réécrire) vers les nouvelles URL

  107. manucc a dit le

    Ok c'est bien ce qu'il me semblait donc un petit coup de redirect 301 dessus et c'est tout bon... n'est ce pas ? Merci de votre retour rapide et de votre réactivité

  108. Olivier Duffez a dit le

    @manucc : oui c'est exactement ça. Tant qu'à faire, j'ai complété mon article avec des explications sur ces redirections 301.

  109. neo5939 a dit le

    Bonjour,

    Je souhaiterais rediriger une url de type :

    vers :

    Mais je n'y parviens pas. Quelqu'un pourrait-il m'aider ?

    Merci d'avance,
    Cordialement.

  110. albert a dit le

    Salut olivier! j'ai voulu faire une redirection mais ça ne marche pas.
    voici mon code:
    RewriteRule ^forum-([0-9]+)\.html$ /forum/voirforum.php?f=$1 [L]

    Au faite j'ai des urls de ce genre /forum/voirforum.php?f=10

  111. albert a dit le

    Bon c'est bien le code marche, mais comment rediriger les anciens urls aux nouveaux urls

  112. MoiJeSors a dit le

    Très beau tuto, fonctionne très bien dans un répertoire test, mais pas du tout pour mon site WordPress.
    J'ai en effet testé les règles de réécriture ainsi que les 301, mais WordPress ne les accepte pas.

    Voici le code de mon .htaccess :

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP:Host} ^www\.monsite\.fr
    RewriteRule /?placecategory=etats-unis / [L]

    Mais quand je me rend sur www .monsite .fr/?placecategory=etats-unis j'ai une erreur 404. Idem si j'active la redirection 301.

    Auriez-vous une idée ?

    Merci et encore félicitation pour votre site ;)

  113. Olivier Duffez a dit le

    @MoiJeSors : il me semble bien que la 1ère partie de la règle de réécriture ne peut pas porter sur la query string (ce qui suit le signe ?)
    il faut gérer cela dans le script (PHP ?) directement

  114. Thib a dit le

    Bonsoir,
    Merci pour ce super tuto ! J'ai une demande un peux différente puisque je ne voudrais récupérer que la fin du contenu de la variable "file"...

    Voici ce que je voudrai faire :

    Adresse actuelle : monsite.fr/cadre.php?file=monsite/avantages.php

    Adresse souhaitée : monsite.fr/avantages.html

    Je précise que j'ai un dossier qui s'appelle "monsite" à la racine de mon hébergement. Il contient des pages "nom de la rubrique.php". C'est uniquement cette chaîne de caractère "nom de la rubrique" que je souhaite récupérer pour construire une url du type monsite.fr/nom de la rubrique.html.

    Je ne trouve pas comment coder ceci. Si quelqu'un peut m'aider... Merci bcp d'avance ;-)

  115. fonds de commerce a dit le

    bonjour
    comment je peux savoir si mon site pouvoir utiliser rewrite,mon site est chez 1and1?
    merci bcp

  116. web listing a dit le

    Bonjour,
    Je cherche comment réécrire un URL en cachant tous les valeurs numériques, pour rendre le lien plus lisible et net, exemple:
    Mon lien mnt est : /c73625-sports
    je veux qu'il soit comme ça /sports
    mais en pouvant plu-tard récupérer l'identifiant de la catégorie (73625).

  117. Olivier Duffez a dit le

    @web-listing : la table de la base de données doit avoir une clé d'index qui ne soit pas uniquement numérique, mais alphanumérique. l'identifiant dans l'URL doit être unique bien entendu.
    pour la suite, merci de poser vos questions dans le forum Réécriture d'URL

Cherchez dans tous les dossiers

Cherchez par mots-clés dans ~2000 articles :

Catégories des dossiers

Consultez les dossiers par thématiques :

Formation référencement et webmarketing

Venez chez Ranking Metrics vous former au référencement, à Google AdWords et Analytics ainsi qu'aux réseaux sociaux ! Plus de 4000 entreprises sont déjà venues (Dossier possible OPCA, DIF...).

Préparés et animés par Olivier Duffez (WebRankInfo) et Fabien Faceries (AgentWebRanking), 2 professionnels reconnus dans le domaine, nos modules sur le référencement naturel sont très complets tout en laissant une grande place à l'interactivité pour répondre à toutes les questions des participants.

Pour connaître le plan détaillé de chaque module, le prix, les dates et les lieux, consultez le site de Ranking Metrics (organisme de formation).

Hébergement web

Hébergement web mutualisé et dédié

Pour un bon référencement, il faut un bon hébergeur. Testez Sivit by Nerim, l'hébergeur choisi par Olivier Duffez pour son site WebRankInfo.

A partir de 3€ HT/mois.