Un apache redirect, autrement dit une re­di­rec­tion Apache, se révèle très utile dans de nombreux cas : afin de diriger les visiteurs de la version HTTP vers la version HTTPS de votre site ou d’une URL www vers une URL sans www. C’est également utile pour modifier les noms de sites et de ré­per­toires. Nous allons vous aider à com­prendre comment fonc­tion­nent les redirects Apache sur CentOS et Ubuntu pour les con­fi­gu­rer au mieux.

Serveurs dédiés
Per­for­mance et in­no­va­tion
  • Pro­ces­seurs dernière gé­né­ra­tion
  • Hardware dédié haute per­for­mance
  • Data centers certifiés ISO

Re­di­rec­tion 301 ou 302 : quelle dif­fé­rence ?

Dans le domaine des re­di­rec­tions, une première dis­tinc­tion est faite entre les re­di­rec­tions 301 et 302. Le premier code de statut (301) désigne une re­di­rec­tion per­ma­nente, tandis que le second (302) désigne une re­di­rec­tion tem­po­raire.

En matière de SEO, il est re­com­mandé d’utiliser les re­di­rec­tion 301. En effet, si un robot d’in­dexa­tion détecte ce type de re­di­rec­tion, il comprend aussitôt qu’elle est per­ma­nente. C’est la raison pour laquelle il ne fera pas qu’en­re­gis­trer la nouvelle URL, mais il lui associera aussi au­to­ma­ti­que­ment la valeur de PageRank de l’ancienne URL. Cette opération permet de maintenir le clas­se­ment SEO déjà obtenu sur la page.

En revanche, lorsque le bot détecte une re­di­rec­tion 302, il en­re­gistre la nouvelle adresse et poursuit son analyse. Selon le type de robot d’in­dexa­tion, il peut décider de noter l’URL pour une visite ul­té­rieure, à un moment indéfini. Pourquoi agit-il ainsi ? Parce que la re­di­rec­tion 302 indique qu’elle n’est que tem­po­raire et que la « véritable » URL, l’URL « finale », sera bientôt en ligne.

Conseil

Lors de la création d’une re­di­rec­tion, indiquez toujours qu’il s’agit d’une re­di­rec­tion 301. Dans de nombreux cas, en l’absence de spé­ci­fi­ca­tion la re­di­rec­tion par défaut est 302.

Redirects 301 d’Apache : les principes de base

Si vous ne devez rediriger qu’une seule URL ou un petit nombre d’URLs, il est facile de les marquer de manière in­di­vi­duelle dans le fichier de con­fi­gu­ra­tion Apache de votre projet.

Re­di­rec­tion simple d’URL

Pour une re­di­rec­tion 301 unique, utilisez la directive Redirect dans le fichier de con­fi­gu­ra­tion Apache avec la syntaxe suivante :

Redirect 301 [ancienne URL] [nouvelle URL]

La nouvelle URL peut aussi être une URL externe. De cette manière, il est possible de com­mu­ni­quer aux uti­li­sa­teurs une URL facile à retenir, du type exemple.com/boutique, au lieu de partager l’URL longue et com­pli­quée d’une page de vente sur Amazon. L’exemple suivant redirige le trafic de exemple.com/boutique vers une boutique Amazon :

Redirect 301 exemple.com/boutique https://www.amazon.fr/stores/exemple/page...

La directive Apache Redirect doit toujours être incluse dans le bloc de commandes Vir­tual­Host du fichier de con­fi­gu­ra­tion principal du serveur Web. Par défaut, ce fichier se trouve aux em­pla­ce­ments suivants :

  • CentOS : /etc/httpd/conf.d/exemple.com.conf
  • Ubuntu : /etc/apache2/sites-available/exemple.com.conf
Note

L’em­pla­ce­ment et le nom de fichier du fichier de con­fi­gu­ra­tion Apache varient selon la façon dont vous (ou votre ad­mi­nis­tra­teur de serveur) avez configuré l’hé­ber­ge­ment.

Vous pouvez modifier ce fichier avec l’éditeur de votre choix, par exemple avec l’éditeur de texte nano.

CentOS :

sudo nano /etc/httpd/conf.d/exemple.com.conf

Ubuntu :

sudo nano /etc/apache2/sites-available/exemple.com.conf

Faites défiler le fichier jusqu’à ce que vous trouviez la commande Vir­tual­Host, dont la structure ressemble à :

<virtualhost *:80></virtualhost>
ServerName exemple.com
	<directory " var www exemple.com html"></directory>
	AllowOverride All

Ajoutez main­te­nant la directive pour le redirect Apache au bloc de commande Vir­tual­Host. Assurez-vous de placer la directive en dehors des blocs de commandes du ré­per­toire :

<virtualhost *:80></virtualhost>
ServerName exemple.com
Redirect 301 /blog https://blog.exemple.com
	<directory " var www exemple.com html"></directory>
	AllowOverride All

En­re­gis­trez et fermez le fichier, puis re­dé­mar­rez Apache pour que les mo­di­fi­ca­tions prennent effet :

CentOS :

sudo systemctl restart httpd

Ubuntu :

sudo service apache2 restart

Apache Redirect de ré­per­toire

Il est aussi possible de rediriger un sous-ré­per­toire de votre site actuel selon la même méthode. Supposons par exemple que vous cherchiez à déplacer le blog de votre site d’un sous-ré­per­toire ('http://exemple.com/blog') vers son propre domaine de nom canonique ('http://blog.exemple.com'). Utilisez alors la directive suivante pour le redirect Apache :

Redirect 301 /blog https://blog.exemple.com

Re­di­rec­tion de domaine www vers un domaine sans www

Il n’est pas rare de devoir trans­fé­rer une URL www vers une URL sans www (ou in­ver­se­ment) via la directive « Ser­ve­rA­lias » dans le fichier de con­fi­gu­ra­tion Apache. Bien que cette méthode fonc­tionne bien du point de vue de l’in­ter­naute, elle n’est pas optimale en termes de SEO. L’uti­li­sa­tion de la directive « Ser­ve­rA­lias » au lieu d’une re­di­rec­tion 301 inclut en effet le risque que les contenus concernés soient con­si­dé­rés comme du contenu dupliqué. En principe, il n’y a pas de dif­fé­rence entre la version www et la version sans www d’une URL en matière de SEO. L’important est juste de choisir une variante et de s’y tenir.

Dans l’exemple qui suit, nous allons rediriger le trafic de l’URL www vers l’URL sans www. Pour cela, nous allons avoir besoin du fichier de con­fi­gu­ra­tion principal Apache, que vous ouvrez à nouveau avec l’éditeur de votre choix, par exemple avec l’éditeur nano.

CentOS :

sudo nano /etc/httpd/conf.d/exemple.com.conf

Ubuntu :

sudo nano /etc/apache2/sites-available/exemple.com.conf

Re­cher­chez la ligne suivante dans le bloc de commandes (avec le domaine in­di­vi­duel de votre projet) :

ServerAlias www.exemple.com

Supprimez cette ligne et faites défiler jusqu’à la fin du fichier. Ajoutez à cet endroit le nouveau bloc de commandes « Vir­tual­Host » suivant :

<virtualhost *:80></virtualhost>
	ServerName www.exemple.com
	Redirect 301 / https://exemple.com/

En­re­gis­trez et fermez le fichier, puis re­dé­mar­rez Apache pour que les mo­di­fi­ca­tions prennent effet.

Apache Redirects plus complexes avec mod_rewrite

Pour des re­di­rec­tions 301 plus complexes, le module Apache mod_rewrite est le meilleur choix. Ce module est rapide, flexible et puissant. De plus, il vous donne la pos­si­bi­lité de manipuler les URL en toute sim­pli­cité. Vous pouvez notamment définir les règles ap­pro­priées dans un fichier .htaccess.

Activer mod_rewrite sous CentOS

mod_rewrite est activé par défaut sous CentOS. Si vous constatez qu’il n’est pas activé, vous pouvez l’activer à tout moment dans le fichier de con­fi­gu­ra­tion de base du module. Pour cela, ouvrez d’abord le fichier avec l’éditeur nano :

sudo nano /etc/httpd/conf.modules.d/00-base.conf

Ajoutez la ligne suivante ou activez-la si elle a été commentée :

LoadModule rewrite_module modules/mod_rewrite.so

L’étape suivante consiste à activer l’uti­li­sa­tion des fichiers .htaccess. Pour ce faire, ouvrez le fichier de con­fi­gu­ra­tion principal d’Apache.

sudo nano /etc/httpd/conf.d/exemple.com.conf

Faites défiler jusqu’au bloc de commandes principal de Vir­tual­Host, qui devrait res­sem­bler à peu de choses près à ça :

<virtualhost *:80></virtualhost>
ServerName exemple.com
	<directory " var www exemple.com html"></directory>
	AllowOverride None

Modifiez l’entrée pour « Al­lo­wO­ver­ride » de « None » à « All » :

AllowOverride All

Si l’entrée Directory manque dans le bloc de commandes Vir­tual­Host, ajoutez-la :

<directory " var www exemple.com html"></directory>
	AllowOverride All
Note

Veillez bien à utiliser le chemin correct vers le ré­per­toire principal de votre site Internet.

En­re­gis­trez et quittez le fichier. Re­dé­mar­rez Apache pour que les mo­di­fi­ca­tions prennent effet :

sudo systemctl restart httpd

Activer mod_rewrite sous Ubuntu

Pour activer mod_rewrite sur un serveur Ubuntu, utilisez la commande suivante :

sudo a2enmod rewrite

Re­dé­mar­rez le serveur Apache pour que les mo­di­fi­ca­tions soient prises en compte :

sudo service apache2 restart

Ensuite, autorisez l’uti­li­sa­tion de fichiers .htaccess. Pour ce faire, modifiez le fichier de con­fi­gu­ra­tion principal d’Apache :

sudo nano /etc/apache2/sites-available/exemple.com.conf

Faites défiler jusqu’au bloc de commandes principal Vir­tual­Host et cherchez le bloc de commandes de ré­per­toire (Directory), qui devrait res­sem­bler à ça :

<directory var www exemple.com html></directory>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted

Modifiez l’entrée pour « Al­lo­wO­ver­ride » de « None » à « All » :

AllowOverride All

Si l’entrée Directory est manquante dans le bloc de commandes Vir­tual­Host, rajoutez-la :

<directory var www exemple.com html></directory>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted

En­re­gis­trez et fermez le fichier puis re­dé­mar­rez le serveur Apache pour que les mo­di­fi­ca­tions soient ef­fec­tives :

sudo service apache2 restart

Con­fi­gu­rer un Redirect Apache via un fichier .htaccess

Après avoir configuré Apache pour qu’il utilise mod_rewrite et autorise les fichiers .htaccess, il est temps de passer au ré­per­toire principal du site et de créer le fichier .htaccess.

Note

Vous n’avez pas besoin de re­dé­mar­rer Apache après avoir apporté les mo­di­fi­ca­tions au fichier .htaccess.

Si vous n’avez effectué aucune mo­di­fi­ca­tion, allez di­rec­te­ment dans le ré­per­toire principal de votre serveur Web Apache de cette façon :

cd /var/www/html

Dans le ré­per­toire, créez main­te­nant le fichier .htaccess et ouvrez-le avec la commande suivante :

sudo nano .htaccess

Indiquez vos con­fi­gu­ra­tions mod_rewrite per­son­na­li­sées. Commencez par un test simple afin de vous assurer que tout fonc­tionne cor­rec­te­ment en ajoutant les lignes suivantes à ce fichier :

RewriteEngine on
RewriteRule ^hello.html$ goodbye.html

Cette règle redirige les requêtes pour hello.html vers la page goodbye.html. En­re­gis­trez et quittez le fichier, puis créez les deux documents HTML à l’aide des commandes suivantes :

sudo echo "Hello" >> hello.html
sudo echo "Goodbye" >> goodbye.html

Ouvrez à présent la page hello.html dans un na­vi­ga­teur. Vous devriez suivre un redirect Apache vers goodbye.html et voir s’afficher le message « Goodbye ».

Rediriger plusieurs domaines vers la même URL avec Apache Redirect

Plusieurs raisons peuvent vous pousser à vouloir rediriger dif­fé­rents domaines vers la même adresse :

  • Si votre site s’appelle exemple.com, il peut être judicieux d’acheter les ex­ten­sions exemple.net et exemple.org pour vous garantir l’ex­clu­si­vité du nom ;
  • Afin de parfaire votre stratégie en ligne, il peut aussi être judicieux d’en­re­gis­trer les fautes d’or­tho­graphe typiques liées à votre nom de domaine, comme exempl.com ou exmple.com et ainsi vous protéger du ty­pos­quat­tage ;
  • Enfin, peut-être possédez-vous des variantes du nom de domaine, type un-exemple.com ou mon-exemple.com, qui devraient toutes guider l’in­ter­naute vers votre site.

Vous pouvez certes rediriger ces noms de domaine vers votre page prin­ci­pale. Cependant, d’un point de vue SEO, mieux vaudra mettre en place des re­di­rec­tions 301 pour atteindre les objectifs fixés.

Pour rediriger plusieurs domaines vers un seul par redirect Apache, activez d’abord le module mod_rewrite comme décrit dans la section pré­cé­dente et con­fi­gu­rez un fichier .htaccess approprié. Ensuite, ajoutez les lignes suivantes au fichier .htaccess :

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?exemple\.net$ [NC]
RewriteRule ^(.*)$ http://exemple.com/$1 [R=301]

Dans cet exemple, on redirige le trafic de données de exemple.net vers exemple.com. Il vous suffit main­te­nant d’adapter cette règle à tous vos noms de domaine en fonction du résultat souhaité. Par exemple, pour rediriger le trafic vers la version www de l’URL (www.exemple.com), utilisez ces lignes :

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?exemple\.net$ [NC]
RewriteRule ^(.*)$ http://www.exemple.com/$1 [R=301]

Comment effectuer un redirect Apache de HTTP vers HTTPS

Pour la sécurité de vos uti­li­sa­teurs autant que pour votre clas­se­ment dans les moteurs de recherche, il est fon­da­men­tal de sécuriser tout le trafic de données de votre site Web via SSL/TLS. Là encore, vous pouvez tra­vail­ler avec un redirect Apache 301 qui re­di­ri­gera au­to­ma­ti­que­ment les visiteurs vers la version HTTPS de vos pages.

Dans ce cas également, con­fi­gu­rez d’abord le fichier mod_rewrite et le fichier .htaccess, puis ajoutez les lignes suivantes au fichier de con­fi­gu­ra­tion :

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://exemple.com$1 [R=301,L]

Comment renommer des sites Web et déplacer des ré­per­toires

Il arrive que vous deviez renommer un site ou un ré­per­toire existant. Tous les liens qui renvoient à cette page sont alors cassés, ce qui affecte l’ex­pé­rience uti­li­sa­teur mais aussi le ré­fé­ren­ce­ment.

Utilisez les règles suivantes dans le fichier .htaccess (après avoir configuré mod_rewrite et les fichiers .htaccess).

Renommer un site :

RewriteEngine on
RewriteRule ^old-page.html$ /new-page.html [R=301]

Renommer un ré­per­toire :

RewriteEngine on
RewriteRule ^old-directory/ /new-directory/ [R=301]

Dans les exemples ci-dessus, les noms de fichiers et de ré­per­toires sont indiqués sous forme de chemin d’accès relatif au ré­per­toire principal du site. Il existe trois options pour les chemins d’accès :

  • Le chemin d’accès complet au système de fichiers, du type /var/wwww/html/new-page.html
  • Le chemin d’accès relatif au ré­per­toire principal, type /new-page.html
  • L’URL absolue, du type 'http://example.com/new-page.html'

En résumé : prin­ci­pales in­for­ma­tions sur mod_rewrite

Le module mod_rewrite utilise des ex­pres­sions ré­gu­lières pour faire cor­res­pondre et remplacer les URL. Pour activer mod_rewrite, la première ligne des règles dans le fichier .htaccess doit toujours res­sem­bler à :

RewriteEngine on

Les Re­wri­te­Rules cons­ti­tuent l’élément central de mod_rewrite. Chaque Re­wri­te­Rule se compose de trois parties :

RewriteRule [pattern] [substitution] [flags]

Le modèle (pattern) est créé à l’aide d’ex­pres­sions ré­gu­lières. Il est possible d’effectuer les rem­pla­ce­ments suivants :

  • Un chemin d’accès complet au système de fichiers ;
  • Un chemin d’accès relatif au ré­per­toire principal ;
  • Une URL absolue.

Les drapeaux (flags) sont fa­cul­ta­tifs. Voici certains des plus courants :

  • L : indique qu’il s’agit de la dernière d’une série de règles ;
  • R=301 : permet de forcer une re­di­rec­tion 301 ;
  • NC : ignore la casse pour que la règle ne fasse pas de dis­tinc­tion entre les ma­jus­cules et les mi­nus­cules.

Pour une liste complète des drapeaux dis­po­nibles, reportez-vous au site officiel Apache.

Dans certains cas, une Re­wri­te­Rule est in­tro­duite par un Re­wri­te­Cond, qui permet de définir les con­di­tions dans les­quelles la Re­wri­te­Rule s’applique. Un Re­wri­te­Cond se compose également de trois parties :

RewriteCond [test string] [condition] [flags]

La chaîne de test (test string) est, ty­pi­que­ment, une variable serveur au format %{VARIABLE NAME}.

Il existe trois types de con­di­tions (condition) :

  • Ex­pres­sions ré­gu­lières ;
  • Com­pa­rai­son de chaînes de ca­rac­tères ;
  • Tests de fichiers ou de chemins d’accès.

Là encore, les drapeaux (flags) sont op­tion­nels. Il existe trois drapeaux pour Re­wri­te­Cond :

  • NC : ignore la casse pour que la règle ne fasse pas de dis­tinc­tion entre les ma­jus­cules et les mi­nus­cules ;
  • OU, le « ou » logique ;
  • NV (pour « No Vary ») : le nom d’en-tête n’est pas inséré dans l’en-tête de réponse Vary.

Quelle dif­fé­rence entre Re­wri­te­Rule et re­di­rec­tion ?

Les Re­wri­te­Rule et les redirects Apache 301 peuvent toutes deux être marquées dans un fichier .htaccess afin de rediriger le trafic du site Web. La prin­ci­pale dif­fé­rence réside dans le fait qu’une Re­wri­te­Rule est mise en œuvre par le module mod_rewrite et une re­di­rec­tion par le module mod_alias.

mod_rewrite mod_alias
Utilise Re­wri­te­Rule et Re­wri­te­Cond Utilise Redirect et Re­di­rect­Match
Très po­ly­va­lent, utilise des ex­pres­sions ré­gu­lières pour faire cor­res­pondre et remplacer les URLs Peu pa­ra­mé­trable
Peut se révéler difficile à utiliser Facile à utiliser
Parfois non installé ou désactivé par défaut Activé par défaut la plupart du temps à l’ins­tal­la­tion d’Apache
Aller au menu principal