Apache redirects : configurer ses redirections sur CentOS et Ubuntu

Un apache redirect, autrement dit une redirection 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épertoires. Nous allons vous aider à comprendre comment fonctionnent les redirects Apache sur CentOS et Ubuntu pour les configurer au mieux.

Serveurs dédiés avec IONOS

Au croisement du hardware et du Cloud : des serveurs dédiés avec intégration Cloud et facturation à la minute + conseiller personnel ! 

Assistance 24/7
Trafic illimité
Certificat SSL

Redirection 301 ou 302 : quelle différence ?

Dans le domaine des redirections, une première distinction est faite entre les redirections 301 et 302. Le premier code de statut (301) désigne une redirection permanente, tandis que le second (302) désigne une redirection temporaire.

En matière de SEO, il est recommandé d’utiliser les redirection 301. En effet, si un robot d’indexation détecte ce type de redirection, il comprend aussitôt qu’elle est permanente. C’est la raison pour laquelle il ne fera pas qu’enregistrer la nouvelle URL, mais il lui associera aussi automatiquement la valeur de PageRank de l’ancienne URL. Cette opération permet de maintenir le classement SEO déjà obtenu sur la page.

En revanche, lorsque le bot détecte une redirection 302, il enregistre la nouvelle adresse et poursuit son analyse. Selon le type de robot d’indexation, il peut décider de noter l’URL pour une visite ultérieure, à un moment indéfini. Pourquoi agit-il ainsi ? Parce que la redirection 302 indique qu’elle n’est que temporaire et que la « véritable » URL, l’URL « finale », sera bientôt en ligne.

Conseil

Lors de la création d’une redirection, indiquez toujours qu’il s’agit d’une redirection 301. Dans de nombreux cas, en l’absence de spécification la redirection 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 individuelle dans le fichier de configuration Apache de votre projet.

Redirection simple d’URL

Pour une redirection 301 unique, utilisez la directive Redirect dans le fichier de configuration 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 communiquer aux utilisateurs une URL facile à retenir, du type exemple.com/boutique, au lieu de partager l’URL longue et compliqué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 VirtualHost du fichier de configuration principal du serveur Web. Par défaut, ce fichier se trouve aux emplacements suivants :

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

L’emplacement et le nom de fichier du fichier de configuration Apache varient selon la façon dont vous (ou votre administrateur de serveur) avez configuré l’hébergement.

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 VirtualHost, dont la structure ressemble à :

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

Ajoutez maintenant la directive pour le redirect Apache au bloc de commande VirtualHost. Assurez-vous de placer la directive en dehors des blocs de commandes du répertoire :

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

Enregistrez et fermez le fichier, puis redémarrez Apache pour que les modifications prennent effet :

CentOS :

sudo systemctl restart httpd

Ubuntu :

sudo service apache2 restart

Apache Redirect de répertoire

Il est aussi possible de rediriger unsous-répertoire 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épertoire ('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

Redirection de domaine www vers un domaine sans www

Il n’est pas rare de devoir transférer une URL www vers une URL sans www (ou inversement) via la directive « ServerAlias » dans le fichier de configuration Apache. Bien que cette méthode fonctionne bien du point de vue de l’internaute, elle n’est pas optimale en termes de SEO. L’utilisation de la directive « ServerAlias » au lieu d’une redirection 301 inclut en effet le risque que les contenus concernés soient considérés comme du contenu dupliqué. En principe, il n’y a pas de diffé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 configuration 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

Recherchez la ligne suivante dans le bloc de commandes (avec le domaine individuel 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 « VirtualHost » suivant :

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

Enregistrez et fermez le fichier, puis redémarrez Apache pour que les modifications prennent effet.

Apache Redirects plus complexes avec mod_rewrite

Pour des redirections 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 possibilité de manipuler les URL en toute simplicité. Vous pouvez notamment définir les règles approprié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 configuration 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’utilisation des fichiers .htaccess. Pour ce faire, ouvrez le fichier de configuration principal d’Apache.

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

Faites défiler jusqu’au bloc de commandes principal de VirtualHost, qui devrait ressembler à 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 « AllowOverride » de « None » à « All » :

AllowOverride All

Si l’entrée Directory manque dans le bloc de commandes VirtualHost, ajoutez-la :

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

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

Enregistrez et quittez le fichier. Redémarrez Apache pour que les modifications 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

Redémarrez le serveur Apache pour que les modifications soient prises en compte :

sudo service apache2 restart

Ensuite, autorisez l’utilisation de fichiers .htaccess. Pour ce faire, modifiez le fichier de configuration principal d’Apache :

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

Faites défiler jusqu’au bloc de commandes principal VirtualHost et cherchez le bloc de commandes de répertoire (Directory), qui devrait ressembler à ça :

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

Modifiez l’entrée pour « AllowOverride » de « None » à « All » :

AllowOverride All

Si l’entrée Directory est manquante dans le bloc de commandes VirtualHost, rajoutez-la :

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

Enregistrez et fermez le fichier puis redémarrez le serveur Apache pour que les modifications soient effectives :

sudo service apache2 restart

Configurer 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épertoire principal du site et de créer le fichier .htaccess.

Note

Vous n’avez pas besoin de redémarrer Apache après avoir apporté les modifications au fichier .htaccess.

Si vous n’avez effectué aucune modification, allez directement dans le répertoire principal de votre serveur Web Apache de cette façon :

cd /var/www/html

Dans le répertoire, créez maintenant le fichier .htaccess et ouvrez-le avec la commande suivante :

sudo nano .htaccess

Indiquez vos configurations mod_rewrite personnalisées. Commencez par un test simple afin de vous assurer que tout fonctionne correctement 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. Enregistrez 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 navigateur. 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 différents domaines vers la même adresse :

  • Si votre site s’appelle exemple.com, il peut être judicieux d’acheter les extensions exemple.net et exemple.org pour vous garantir l’exclusivité du nom ;
  • Afin de parfaire votre stratégie en ligne, il peut aussi être judicieux d’enregistrer les fautes d’orthographe typiques liées à votre nom de domaine, comme exempl.com ou exmple.com et ainsi vous protéger du typosquattage ;
  • 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’internaute vers votre site.

Vous pouvez certes rediriger ces noms de domaine vers votre page principale. Cependant, d’un point de vue SEO, mieux vaudra mettre en place des redirections 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 configurez 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 maintenant 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 utilisateurs autant que pour votre classement dans les moteurs de recherche, il est fondamental de sécuriser tout le trafic de données de votre site Web via SSL/TLS. Là encore, vous pouvez travailler avec un redirect Apache 301 qui redirigera automatiquement les visiteurs vers la version HTTPS de vos pages.

Dans ce cas également, configurez d’abord le fichier mod_rewrite et le fichier .htaccess, puis ajoutez les lignes suivantes au fichier de configuration :

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

Comment renommer des sites Web et déplacer des répertoires

Il arrive que vous deviez renommer un site ou un répertoire existant. Tous les liens qui renvoient à cette page sont alors cassés, ce qui affecte l’expérience utilisateur mais aussi le référencement.

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épertoire :

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

Dans les exemples ci-dessus, les noms de fichiers et de répertoires sont indiqués sous forme de chemin d’accès relatif au répertoire 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épertoire principal, type /new-page.html
  • L’URL absolue, du type 'http://example.com/new-page.html'

En résumé : principales informations sur mod_rewrite

Le module mod_rewrite utilise des expressions régulières pour faire correspondre et remplacer les URL. Pour activer mod_rewrite, la première ligne des règles dans le fichier .htaccess doit toujours ressembler à :

RewriteEngine on

Les RewriteRules constituent l’élément central de mod_rewrite. Chaque RewriteRule se compose de trois parties :

RewriteRule [pattern] [substitution] [flags]

Le modèle (pattern) est créé à l’aide d’expressions régulières. Il est possible d’effectuer les remplacements suivants :

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

Les drapeaux (flags) sont facultatifs. 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 redirection 301 ;
  • NC : ignore la casse pour que la règle ne fasse pas de distinction entre les majuscules et les minuscules.

Pour une liste complète des drapeaux disponibles, reportez-vous au site officiel Apache.

Dans certains cas, une RewriteRule est introduite par un RewriteCond, qui permet de définir les conditions dans lesquelles la RewriteRule s’applique. Un RewriteCond se compose également de trois parties :

RewriteCond [test string] [condition] [flags]

La chaîne de test (test string) est, typiquement, une variable serveur au format %{VARIABLE NAME}.

Il existe trois types de conditions (condition) :

  • Expressions régulières ;
  • Comparaison de chaînes de caractères ;
  • Tests de fichiers ou de chemins d’accès.

Là encore, les drapeaux (flags) sont optionnels. Il existe trois drapeaux pour RewriteCond :

  • NC : ignore la casse pour que la règle ne fasse pas de distinction entre les majuscules et les minuscules ;
  • 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 différence entre RewriteRule et redirection ?

Les RewriteRule et les redirects Apache 301 peuvent toutes deux être marquées dans un fichier .htaccess afin de rediriger le trafic du site Web. La principale différence réside dans le fait qu’une RewriteRule est mise en œuvre par le module mod_rewrite et une redirection par le module mod_alias.

mod_rewrite mod_alias
Utilise RewriteRule et RewriteCond Utilise Redirect et RedirectMatch
Très polyvalent, utilise des expressions régulières pour faire correspondre et remplacer les URLs Peu paramé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’installation d’Apache