Apprendre à utiliser le fichier .htaccess

Logo ApacheBeaucoup de référenceurs n'ont pas le profil technique (je fais d'ailleurs partie de ceux-ci bien que je travaille à m'améliorer), pourtant il est parfois nécessaire de mettre les mains dans le cambouis et de s'attaquer à des fichiers qui peuvent faire peur.

C'est notamment le cas du fichier .htaccess, c'est pourquoi je vais tenter de vulgariser son utilisation aujourd'hui, d'un point de vue SEO en tout cas. À la fin de la lecture de ce billet, vous saurez réécrire et rediriger des URL, vous saurez améliorer les performances de votre site, vous saurez définir des règles d'indexation et vous saurez spécifier des pages d'erreurs personnalisées.

C'est quoi le .htaccess ?

Pour commencer, voici une petite présentation de ce fichier au nom si doux et plein de poésie. Le .htaccess est un fichier de configuration du serveur Apache, le type de serveur web le plus populaire. Il indique des directives au serveur quant à la gestion des fichiers présents sur celui-ci. Voilà une explication galvaudée au possible mais qui a le mérite d'être simple à comprendre.

Ce fichier n'est pas unique, il peut être présent à la racine de votre site mais vous pouvez en créer d'autres dans des sous-répertoire. Dans ce cas, celui-ci ne s'appliquera qu'à son répertoire ainsi qu'à ses répertoires enfants, ceux placés en dessous dans l'arborescence donc, mais il ne s'appliquera pas aux répertoires parents. En général lorsque vous installez un CMS, un ou plusieurs .htaccess existent déjà.

Il est également important de préciser que le .htaccess vient transgresser le fichier de configuration du serveur : certaines actions sont peut-être plus intéressantes à effectuer dans ces fichiers.

Si vous souhaitez créer un fichier .htaccess, ouvrez Notepad, enregistrez le fichier en le nommant par exemple "1.htaccess" (ne choisissez pas l'option ".txt" par défaut !) et uploadez ce fichier sur votre FTP. De là, renommez le en supprimant ce qui se trouve avant le point.

Rediriger des URL

Allez, on se jette dans le bain avec une petite directive très facile à réaliser : la redirection d'une URL vers une autre. Pour ce faire, nous allons devoir indiquer au serveur

  • ce que nous voulons faire (une redirection)
  • l'URI (mémo : l'URI est ce qui se trouve juste après le nom de domaine dans l'URL) de la page à rediriger
  • l'URL de la page vers laquelle la redirection doit se faire

Voici ce à quoi le code va ressembler pour une redirection permanente d'une page vers une autre :

RedirectPermanent /ancien-dossier/ancienne-page.html http://www.domaine.com/nouveau-dossier/nouvelle-page.html

Une redirection permanente d'un dossier complet (avec ses sous-dossiers et ses pages) :

RedirectPermanent /ancien-dossier http://www.domaine.com/nouveau-dossier

Un redirection d'un domaine vers un autre domaine (avec ses dossiers et ses pages, en conservant la même structure) :

RedirectPermanent / http://www.domaine.com/

Pour effectuer une redirection temporaire, vous pouvez utiliser le même code en supprimant le mot Permanent.

C'était facile n'est-ce pas ? Aucun caractère bizarre, tout est clair et compréhensible là dedans, et ça fait très bien le taff ! Allez, on va corser un peu la chose en appliquant des expressions régulières qui vont nous permettre de n'avoir qu'une ligne pour rediriger des centaines d'URL.

Admettons que par le passé, vos URL de catégorie étaient de type domaine.fr/cat-nomdelacatégorie-12/ (où nomdelacatégorie et 12 sont variables) et qu'aujourd'hui elles sont sous la forme domaine.fr/12-nomdelacatégorie/ ; avec bien sûr dans les deux cas le nom de la page qui arrive après le dernier slash (exemple : domaine.fr/cat-nomdelacatégorie-12/page.html et domaine.fr/12-nomdelacatégorie-/page.html). Voici à quoi ressemblera la redirection, valable pour toutes vos catégories et pages enfantes :

RedirectMatch 301 /cat-(.*)-([0-9]+)/(.*) http://domaine.fr/$2-$1/$3

Expliquons ceci plus en détail. Avant tout, vous pouvez remarquer que nous avons la même structure que la précédente : RedirectMatch URI URL, mais où "RedirectMatch 301" a remplacé "RedirectPermanent" et à laquelle nous avons appliqué une expression régulière, voici ce que signifie chacun des éléments de cette regex :

  • les () : elles servent à créer un groupe
  • les . : ils signifient "n'importe quel caractère"
  • les * : elles signifient "supprime ou répète le caractère précédent une ou plusieurs fois"
  • le [0-9] : il signifie "n'importe quel chiffre entre 0 et 9"
  • le + : il signifie "répète le caractère précédent une ou plusieurs fois"
  • les $1, $2 et $3 : ils récupèrent le contenu des groupes (donc des parenthèses) créés dans la regex

Concrètement, voici ce que nous disons dans la première parenthèse : "trouve n'importe quel caractère autant de fois que nécessaire". Dans la seconde : "trouve n'importe quel chiffre autant de fois que nécessaire". Et dans la troisième : "trouve n'importe quel caractère autant de fois que nécessaire".

Ensuite, le $2 donne la directive suivante : "place ici le contenu de la seconde parenthèse". Le $1 indique "place ici le contenu de la première parenthèse". Et vous l'aurez deviné, le $3 indique "place ici le contenu de la troisième parenthèse".

Dans les faits, grâce à cette ligne nous redirigeons domaine.fr/cat-chaussures-4/tongs-bleues.html vers domaine/4-chaussures/tongs-bleues.html mais aussi domaine.fr/cat-chemise-27/rouge44.php vers domaine.fr/27-chemise/rouge44.php ; et ainsi de suite.

Réécriture d'URL

Une autre action que nous pouvons mettre en place dans le htaccess concernant les URL est la réécriture de celles-ci. Pour l'exemple, nous prendrons une URL avec un seul paramètre pour simplifier l'explication : domaine.fr/veste.php?id=88. Est-ce qu'il ne serait pas plus sympa de la proposer sous la forme domaine.fr/veste-88.php ?

Concrètement, nous allons devoir faire deux choses : indiquer au serveur que nous autorisons la réécriture d'URL et lui indiquer la ou les règles de réécriture.

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)-([0-9]+)\.php$ /$1.php?id=$2 [L]

Les deux premières lignes sont celles qui indiquent que nous autorisons la réécriture d'URL. Important : elles ne doivent apparaître qu'une fois dans le fichier htaccess, et avant la première règle de réécriture évidemment.

La troisième ligne est celle qui donne la règle de réécriture. Elle se présente sous la forme RewriteRule URL-que-nous-voulons-afficher URL-qui-est-réécrite. Concernant sa signification, ce sera le petit jeu du jour, vous avez déjà les informations nécessaires pour tout comprendre ! Ah oui, j'ai rajouté trois caractères par rapport à l'exemple précédent :

  • le ^ : il indique le début de la chaine de caractères
  • le \ : il échappe le caractère suivant (on veut que le point soit considéré comme un point et non comme un élément de regex)
  • le $ : il marque la fin de la chaine de caractères
Le [L] indique au serveur qu'il n'a pas besoin de chercher une autre règle lorsqu'il a répondu à celle-ci (alors ça si c'est pas une explication bien grossière, je ne m'y connais pas...)

Attention, vous avez réécrit vos URL mais l'URL réécrite est toujours accessible, pensez à faire une redirection ! Ou lisez la suite de l'article, tout y est expliqué :)

Pour que l'URL réécrite (celle avec le paramètre dans l'exemple précédent) ne soit plus accessibles, il va falloir combiner la réécriture et la redirection. Voici comment ça se présente, en reprenant toujours l'exemple précédent :

RewriteRule ^(.*)\.php\?id=([0-9]+)$ http://domaine.fr$1-$2.php [R=301,L]

Encore une fois, vous avez compris le principe, mais nous avons ici rajouté R=301 dans les crochets, nous indiquons tout simplement que nous souhaitons effectuer une redirection permanente.

Améliorer les performances du site

Je suis désolé, je vais ici devoir faire le fainéant. Une autre façon serait de dire que je ne vais pas réinventer la roue. Mais dans tous les cas, je vous renvoie vers l'article paru sur SeoMix et qui traite du sujet. La bonne nouvelle ? C'est que vous pourrez faire des copier-coller ! Mais lisez tout de même l'article, il est vraiment intéressant ;-)

Définir des règles d'indexation

Je ne fais pas le fainéant très longtemps et je reprends tout de suite les explications et les codes sauvages avec ce paragraphe ! Nous allons ici apprendre des règles relatives au comportement des robots sur les pages. Plus concrètement, nous allons lui indiquer s'il doit ou non indexer les pages et suivre ou non les liens qui sont présents dans ces pages en utilisant ce qu'on appelle l'en-tête X-Robots-Tag.

Admettons que vous avez sur votre site des fichiers PDF qui sont les copies conformes de vos pages, vous ne souhaitez donc pas les indexer pour éviter le contenu dupliqué. Voici la marche à suivre :

<FilesMatch "\.pdf$">
Header set X-Robots-Tag "noindex, nofollow"
</Files>

Finalement, on se rapproche assez du langage HTML : on ouvre une balise et on la referme par la suite. Au sein de cette balise, on indique des directives. Et l'ouverture de cette balise indique également à quel type de fichier on applique les directives. Ici, nous avons choisi d'indiquer la directive "noindex, nofollow" à tous les fichiers se terminant par ".pdf". Simple non ?

Si vous souhaitez indiquer cette directive à un fichier en particulier, voilà comment ça va se présenter :

<Files page.html>
Header set X-Robots-Tag "noindex, nofollow"
</Files>

De cette façon, le fichier "page.html" sera le seul à recevoir cette directive.

Vous remarquerez qu'il est également possible d'utiliser les regex lorsqu'on ouvre une balise ;-)

Spécifier des pages d'erreur personnalisées

On va finir sur une note toute douce et très simple à mettre en place : la spécification de pages d'erreurs personnalisées. Ça se passe en trois temps. Vous souhaitez une page d'erreur 404 et une page d'erreur 403 personnalisées, vous allez devoir :

  • Créer ces pages
  • Les uploader sur votre site via votre FTP, comme pour tout autre fichier
  • Indiquer via le htaccess que ces pages doivent apparaitre lorsqu'une erreur intervient

Si vous avez appelé vos pages 404.html et 403.html et que vous les avez uploadées à la racine, voici à quoi ressemblera le code à intégrer dans le htaccess :

ErrorDocument 404 /404.html
ErrorDocument 403 /403.html

Et voilà, c'est aussi simple que ça ! Vous pouvez bien sûr créer d'autres pages pour d'autres types d'erreurs : 400, 501, 503, etc.

Conclusion

J'ai tout de même envie de rajouter deux petites choses : n'hésitez surtout pas à commenter votre fichier (en commençant vos lignes par le caractère #) pour vous y retrouver par la suite, et surtout si vous n'êtes pas certain de ce que vous faites, gardez bien précieusement une sauvegarde du fichier ;-)

J'espère que cet article vous aura été utile et vous aura appris deux ou trois petites choses !

Catégorie Référencement | Thématique .

15 réponses à Apprendre à utiliser le fichier .htaccess

  1. david says:

    Merci pour cette piqure de rappel, j’avais oublié la possibilité de mettre différentes pages d’erreur. J’allais te parler du cache avec htacces pour accélérer le temps de chargement du site mais tu as mis un lien vers seomix que je viens juste voir ;)

  2. Chapeau,
    article agréable à lire, qui condense l’information sur ce qu’il y a à savoir sur les bases du Htaccess.

    Mais c’est dommage, une fois encore, tu restes à la surface comme la plupart des articles que j’ai pu lire pour me documenter sur comment jouer avec APACHE.

    Alors attention, les bases sont essentielles, mais pourquoi ne pas être allé plus loin ?
    –> Comment rediriger un domaine qui est appelé sans les « www. » pour qu’il redirige vers sa version « www. » ?
    –> Comment rediriger automatiquement http://www.ndd.tld/index.html vers http://www.ndd.tld ?
    –> Campagne de redirection massive si changement de CMS (très utile pour les E-commerce) avec les MAPs de redirections ?

    Avec ce genre de problématique supplémentaire abordée, ton article passerait certainement de « encore un article sur le Htaccess » à « L’article de référence sur le Htaccess »

    Bon, je sais, je suis un peu direct, je ne mets pas forcément les formes, mais le but de ce commentaire n’a pas pour but de t’envoyer une pique, mais bel et bien de tenter de te faire aller au delà de ce qu’il existe déjà sur le WEB ;)

  3. BlogMestre says:

    Juste une précision, le fichier .htaccess est un fichier permettant de dérroger localement à la configuration du serveur apache. Toutes les directives présentes dans ce fichier peuvent êtres spécifiées dans le fichier global de configuration d’Apache. .htaccess doit donc être utilisé lorsque l’on a pas accès à la configuration Apache car cela induit des baisses de performances du serveur.

  4. Véronique says:

    Avec la réécriture d’URL, nous obtenons des URLs propres et plus sécurisée surtout côté envoie des données par la méthode GET.
    Si on a à réécrire nos URLs de la manière suivante:
    RewriteRule URL_A_REECRIRE URL_REECRITE
    Quelle URL doit être présente au niveau de nos pages, URL_A_REECRIRE ou URL_REECRITE?

  5. Doeurf says:

    Merci pour ce post très commenté et compréhensible sur l’utilisation du .htaccess, je me permet d’y rajouter la redirection du domaine sans www vers le sous domaine avec www :
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.mondomaine.com$
    RewriteRule ^(.*)$ http://www.mondomaine.com$1 [R=301,L]

    Il y a aussi la difficile redirection permanente des url avec des paramètres en GET, c’est à s’arracher les cheuveux, la commande « Redirect permanent » ne fonctionne pas.
    Pour cela voici un exemple :
    RewriteCond %{QUERY_STRING} ^option=com_content&do_pdf=1&id=73$ [NC]
    RewriteRule ^(.*)$ http://www.mondomaine.fr/mapage.php? [R=301,L]

    Enfin, un gros ATTENTION car la commande « Redirect » tout court génère une 302

  6. tanguy says:

    Intéressant, par contre en temps de chargement qu’est-ce qui est le mieux :
    Renseigner en dur le no index no follow ou le faire par htaccess pour une page spécifique ?

  7. Victor says:

    Le htaccess est incroyablement utile et on l’utilise presque tous les jours, mais peu d’entre nous le portent dans son cœur. Merci pour ce résumé des fonctionnalités les plus pratiques à garder sous le coude.

  8. Bonjour Sylvain. Merci pour cet article qui résume les actions essentielles possible avec le .htaccess ! Très utile !

  9. Sylvain says:

    @David : pas de soucis je ne le prends pas mal ;-) Pour tes questions, justement les deux premières ont déjà été évoquées à maintes reprises, je ne voulais pas faire une redite supplémentaire. Pour le MAP rewriting j’y ai pensé, mais impossible de l’expliquer simplement :s Tu as un mail ;-)

    @BlogMestre : comme tu as raison ! Et j’aurais dû le préciser, c’est chose faite ;-)

    @Véronique : je n’ai pas compris ta question :/

    @Doeurf : merci pour les ajouts ;-) Concernant « Redirect » je l’avais en effet évoqué dans un autre article, j’aurais dû le préciser à nouveau ici. Mais je l’ai aussi évoqué dans cet article, dans le cadre « astuces »

    @tanguy : sans avoir testé, je pense que la version htaccess est plus intéressante (seulement si tu as un grand nombre de pages à tagger)

  10. Stéphane says:

    Très bon article.
    Apache est vraiment très dominant puisqu’on trouve assez facilement et régulièrement des articles sur htaccess. En revanche, il y a beaucoup moins de littérature quand on part sur IIS.

  11. Nicolas says:

    Bonjour et merci pour cet article complet sur le htaccess, un élément incontournable qui devient un peu un couteau suisse dans le cadre de notre référencement. Je me permets de suggérer aussi la fonction order allow, deny, pratique pour bloquer les créateurs de DC entre autres.

  12. Keework.com says:

    Je n’y comprends rien au htaccess, j’aimerai bien que quelqu’un invente un éditeur visuel ou on pourrai cocher des cases et remplir des champs pour arriver à nos fins, tous ces paramètres me donnent le tourni !

  13. création site de rencontre says:

    Bonjour,
    On est pas toujours conscient de tout ce que l’on peut faire avec un htaccess. Pour être un « bon seo », on se doit de connaitre un minimum le côté technique de la maintenance d’un site web parce que dès fois, le problème d’un site se situe non pas sur du contenu « on-page » mais sur la configuration du site.

  14. marc says:

    Merci, de bons rappels que l’on oublie souvent. Bien pratiques et simples…

  15. fabien says:

    Un article relativement intéressant et détaillé! Puisque Htaccess est un ensemble de fichiers de configuration d’Apache. Plus précisément, ces fichiers sont de restriction d’accès. c’est très utile!!!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Veuillez utiliser votre nom ou votre pseudo. Tout commentaire ne respectant pas cette règle verra son lien supprimé.