# 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.

## 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](https://www.ionos.fr/digitalguide/web-marketing/search-engine-marketing/quest-ce-quun-crawler/ "Qu’est-ce qu’un crawler&nbsp;?") 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 :

```none
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** :

```none
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 :**

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

**Ubuntu :**

```none
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 à :

```none
<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 :

```none
<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 :**

```none
sudo systemctl restart httpd
```

**Ubuntu :**

```none
sudo service apache2 restart
```

### Apache Redirect de répertoire

Il est aussi possible de **rediriger un** **sous-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 :

```none
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é](https://www.ionos.fr/digitalguide/web-marketing/search-engine-marketing/duplicate-content-contenu-duplique/ "Duplicate content (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 :**

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

**Ubuntu :**

```none
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) :

```none
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 :

```none
<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](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/les-meilleures-astuces-htaccess/ "Les meilleures astuces .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 :

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

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

```none
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.

```none
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 :

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

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

```none
AllowOverride All
```

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

```none
<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 :

```none
sudo systemctl restart httpd
```

### Activer mod\_rewrite sous Ubuntu

Pour activer mod\_rewrite sur un serveur Ubuntu, utilisez la commande suivante :

```none
sudo a2enmod rewrite
```

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

```none
sudo service apache2 restart
```

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

```none
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 :

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

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

```none
AllowOverride All
```

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

```none
<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 :

```none
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 :

```none
cd /var/www/html
```

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

```none
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 :

```none
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 :

```none
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](https://www.ionos.fr/digitalguide/domaines/conseils-sur-le-domaine/protegez-votre-nom-de-domaine-du-typosquatting/) ;
- 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 :

```none
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 :

```none
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](https://www.ionos.fr/digitalguide/sites-internet/creation-de-sites-internet/comment-passer-un-site-web-en-ssl-et-https/ "Comment passer un site Web en SSL et HTTPS?"). 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 :

```none
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 :**

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

**Renommer un répertoire :**

```none
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 à :

```none
RewriteEngine on
```

Les **RewriteRules** constituent **l’élément central** de mod\_rewrite. Chaque RewriteRule se compose de trois parties :

```none
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](https://httpd.apache.org/docs/current/rewrite/flags.html "Apache&nbsp;: Les drapeaux de réécriture").

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 :

```none
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.

<table>
  <thead>
    <tr>
      <th>mod\_rewrite</th>
      <th>mod\_alias</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Utilise RewriteRule et RewriteCond</td>
      <td>Utilise Redirect et RedirectMatch</td>
    </tr>
    <tr>
      <td>Très polyvalent, utilise des expressions régulières pour faire correspondre et remplacer les URLs</td>
      <td>Peu paramétrable</td>
    </tr>
    <tr>
      <td>Peut se révéler difficile à utiliser</td>
      <td>Facile à utiliser</td>
    </tr>
    <tr>
      <td>Parfois non installé ou désactivé par défaut</td>
      <td>Activé par défaut la plupart du temps à l’installation d’Apache</td>
    </tr>
  </tbody>
</table>


This is a markdown version of: [https://www.ionos.fr/digitalguide/serveur/configuration/redirections-avec-apache/](https://www.ionos.fr/digitalguide/serveur/configuration/redirections-avec-apache/) for AI/LLM consumption.