# Redirection 301

Le terme 301 Redirect fait référence au **transfert permanent d’une adresse Web** vers une autre. Nous expliquons le contexte technique et montrons comment configurer Redirect 301 avec un fichier .htacess sur le serveur.

## À quoi servent les 301 Redirects ?

301 Redirect est la méthode de **transfert** la plus connue. Ici, le chiffre 301 fait référence au code de statut HTTP dont il est question. Bien que le code de statut 404 indique que la ressource demandée est introuvable, les codes 300 font référence à des redirections, ou « redirects » en anglais. En général, les redirections 301 sont utilisées pour éviter les erreurs 404.

Faisons le tour des [principaux codes de statut http](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/apercu-des-codes-de-statut-http-principaux/ "Le codes de statut HTTP") associés aux redirections :

<table>
  <thead>
    <tr>
      <th><strong>Code de statut HTTP</strong></th>
      <th><strong>Explication</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>200 OK</td>
      <td>La ressource à l’adresse interrogée est disponible en permanence à une nouvelle adresse renvoyée par le serveur. L’ancienne adresse n’est plus valide.</td>
    </tr>
    <tr>
      <td>301 Moved Permanently</td>
      <td>La ressource à l’adresse interrogée est disponible en permanence à une nouvelle adresse renvoyée par le serveur. L’ancienne adresse n’est plus valide.</td>
    </tr>
    <tr>
      <td>302 Found</td>
      <td>La ressource à l’adresse interrogée est temporairement disponible à une nouvelle adresse renvoyée par le serveur. L’ancienne adresse peut éventuellement être à nouveau valide à l’avenir.</td>
    </tr>
    <tr>
      <td>303 See Other</td>
      <td>Similaire à 302, à la différence près que seules les requêtes GET sont autorisées lors de l’appel de l’adresse temporaire.</td>
    </tr>
    <tr>
      <td>307 Temporary Redirect</td>
      <td>Similaire à 302 ; contrairement à 303, le client peut modifier la méthode HTTP (GET, POST, PUT, etc.) lors de l’appel de l’adresse temporaire.</td>
    </tr>
    <tr>
      <td>404 Not Found</td>
      <td>Le serveur ne trouve aucune ressource à l’adresse interrogée.</td>
    </tr>
  </tbody>
</table>

```none
### Redirection 301 pour migrer du contenu
```

Les contenus Web, que l’on désigne également comme des ressources, sont localisés sous des adresses Web. Parfois, les contenus sont migrés, c’est-à-dire que **le contenu reste le même et que seule l’adresse change**. Ceci peut être notamment le cas lors du passage de HTTP à HTTPS, du déplacement d’un site vers un nouveau domaine ou de l’ajustement de la structure de liens pour l’optimisation du référencement auprès d’un moteur de recherche. Dans tous les cas, on cherche à éviter que les utilisateurs accédant aux adresses existantes se retrouvent dans l’impasse.

Si le serveur ne peut **pas associer de ressource à une adresse,** il renvoie l’erreur HTTP 404 « Not Found ». Cela est ennuyeux pour les utilisateurs car ils ne peuvent pas accéder à la ressource souhaitée. Si l’adresse est accessible par un[crawler Web](https://www.ionos.fr/digitalguide/web-marketing/search-engine-marketing/quest-ce-quun-crawler/ "Crawler Web") au lieu d’un humain, les erreurs 404 entraîneront la désindexation de la ressource associée. Les exploitants de site Web tentent d’éviter autant que possible ces deux scénarios.

```none
### Redirection 301 pour l’optimisation du référencement auprès des moteurs de recherche
```

Mis à part les changements d’adresse des contenus Web, les 301 Redirects sont **essentiels pour l’optimisation du référencement auprès des moteurs de recherche (SEO) et pour le marketing en ligne.** Par exemple, les redirections 301 sont utilisées pour générer les [URL adaptées aux moteurs de recherche](https://www.ionos.fr/digitalguide/web-marketing/search-engine-marketing/limportance-des-url-en-seo/ "L’importance des URL en SEO") et les « URL canoniques ». Les [réducteurs d’URL](https://www.ionos.fr/digitalguide/web-marketing/les-media-sociaux/reducteur-durl/ "Réducteur d’URL") eux aussi reposent en interne sur les redirections de type 301.

Pourquoi les 301 Redirects sont-ils si importants pour le SEO ? Contrairement aux redirections 302, 303 et 307 apparentées, seule la redirection 301 transfère le **« Link Juice » ou « jus SEO » de l’adresse d’origine vers la nouvelle adresse**. Si un moteur de recherche a indexé un contenu et l’a analysé comme positif, l’adresse peut être réinitialisée via une redirection 301 sans perdre sa note. Ainsi, les Redirects 301 permettent de mettre sur pied des stratégies de SEO complexes telles qu’une [stratégie multidomaine](https://www.ionos.fr/digitalguide/domaines/conseils-sur-le-domaine/strategie-multidomaine/ "Stratégie multidomaine").

## Comment fonctionnent les 301 Redirects ?

Une redirection 301 intervient **lors de l’échange entre les serveurs Web et les clients**. Le serveur informe le client que la ressource demandée n’est plus disponible à l’adresse Web interrogée (URL) et transmet l’adresse qui est maintenant valide. Le client peut être à la fois le navigateur manipulé par un utilisateur humain et un robot de moteur de recherche.

1. Le client tente d’accéder à la ressource sous l’URL.
2. Le serveur répond en renvoyant le code de statut 301 « Moved Permanently » et transmet la nouvelle URL pour accéder à la ressource dans l’en-tête HTTP Location.
3. Le client met en cache la nouvelle URL ; les accès futurs à l’ancienne URL accèderont immédiatement à la nouvelle URL.
4. Le client tente d’appeler la ressource sous la nouvelle URL.

L’[outil de réseau cURL](https://www.ionos.fr/digitalguide/serveur/outils/debuter-dans-curl-sous-windows/ "cURL sous Windows 10") populaire permet de visualiser le déroulement de ce processus. Nous allons à la page d’accueil de IONOS à *http://ionos.fr* et utilisons la méthode HTTP *HEAD* pour sortir l’en-tête de réponse :

```none
curl --head http://ionos.fr
```

Le serveur IONOS répond avec le code de statut HTTP « 301 Moved Permanently », et **l’en-tête Location contient la nouvelle adresse** *https://www.ionos.fr/*. Comme nous l’observons, la page d’accueil se trouve sous le sous-domaine WWW et utilise le protocole HTTPS. Ensuite, nous demandons à cURL de suivre en plus la redirection 301 avec l’option *Location* :

```none
curl --head --location http://ionos.fr
```

cURL sort maintenant les en-têtes de deux connexions. Lors du deuxième appel, **le serveur répond avec le code de statut « 200 OK »** ; la ressource a été trouvée, le contenu est transmis dans le corps de la réponse. Le même processus s’exécute en arrière-plan dans votre navigateur lorsque vous entrez l’adresse.

```none
### Définir le redirect 301 avec le fichier .htaccess
```

Nous avons examiné le rôle que joue la redirection 301 dans l’échange entre le serveur et le client. Mais **comment puis-je constater l’existence de 301 Redirects sur le serveur**? Plusieurs approches existent pour cela : l’une des plus couramment utilisée consiste à définir des directives de redirection dans le [fichier .htaccess](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/les-meilleures-astuces-htaccess/ "Dix astuces .htaccess") du serveur Web Apache. Pour que cela fonctionne, les modules Apache correspondants doivent être actifs :

<table>
  <thead>
    <tr>
      <th><strong>Directives</strong></th>
      <th><strong>Module Apache</strong></th>
      <th><strong>Explication</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Redirect</td>
      <td>mod\_alias</td>
      <td>Redirections simples</td>
    </tr>
    <tr>
      <td>Rewrite</td>
      <td>mod\_rewrite</td>
      <td>Transferts complexes</td>
    </tr>
  </tbody>
</table>

```none
### Redirects simples pour la redirection 301 dans le .htaccess
```

Observons tout d’abord comment définir des Redirects simples de type 301 dans le fichier .htaccess. Pour ce faire, nous utilisons les directives Redirect du module *mod\_alias*. Elles sont utiles dès lors qu’il s’agit de **rediriger une URL sur le serveur vers une autre URL**. La structure est d’une grande simplicité :

```none
Redirect 301 "/source_path" "target_URL"
```

Nous redirigeons une **URL sur le serveur vers une autre URL interne** dans un premier temps. La barre oblique au début désigne le début du chemin d’URL, à savoir la partie après le domaine :

```none
Redirect 301 "/old.html" "/new.html"
```

Si nous souhaitons **effectuer le renvoi vers une URL externe**, nous la notons au titre de destination :

```none
Redirect 301 "/old.html" "http://example.com/new.html"
```

Vous pouvez également définir des **redirections 301 de répertoires entiers** dans le fichier .htaccess à l’aide de la directive Redirect. Nous redirigeons toutes les URL commençant par le composant de chemin « fr » vers un sous-domaine :

```none
Redirect 301 "/fr/" "http://fr.example.com/"
```

En adoptant le même schéma, **toutes les URL d’un domaine peuvent être** [redirigées vers un autre domaine](https://www.ionos.fr/digitalguide/domaines/gestion-de-domaine/redirection-de-nom-de-domaine-les-bases/ "Transfert d’un nom de domaine") :

```none
Redirect 301 "/" "http://other.example.com/"
```

Si vous voulez rediriger de nombreuses adresses individuelles calquées sur un certain schéma, la notation des redirections au cas par cas va prendre rapidement des proportions fastidieuses. Vous pouvez recourir dans ce cas à la directive RedirectMatch. Elle **utilise une expression régulière pour détecter des motifs** et en extraire des éléments :

```none
RedirectMatch 301 regex URL
```

Voici un exemple d’entrée RedirectMatch qui **extrait la catégorie et le numéro d’identification d’un article issu des paramètres GET**, et les réécrit dans le chemin :

```none
RedirectMatch 301 "/article.php?cat=(.*)&id=(.*)" "/articles/$1/$2/"
```

Prenons comme exemple le domaine example.com. L’URL *http://example.com/article.php?cat=web&amp;id=42* serait alors redirigée vers *http://example.com/articles//web/42/*.

```none
### Redirects complexes pour la redirection 301 dans le fichier .htaccess
```

Pour créer des **redirections 301 pour des cas d’utilisation complexes**, on se tourne vers des directives de réécriture du [module de redirection Apache](https://www.ionos.fr/digitalguide/serveur/configuration/redirections-avec-apache/ "Redirections avec Apache") *mod\_rewrite*. Cela vous permet de définir et d’interroger des conditions de redirection, de définir et de lire des variables d’environnement et de définir des règles de redirection avec des expressions régulières.

Avec *mod\_rewrite*, il est possible d’enchaîner des règles de redirection ; le module fournit quasiment un **mini-langage de programmation pour reformer les URL et déclencher des redirections.** Faites preuve de prudence ici, car une erreur pourrait se traduire par des boucles sans fin.

Les directives Rewrite commencent par la ligne « RewriteEngine on ». Cette opération est suivie de conditions de redirection RewriteCond facultatives, complétées par une ou plusieurs règles de redirection RewriteRule. Le comportement des conditions et des règles de redirection **peut être influencé par des options nommées « flags »** ou « drapeaux ». Pour déclencher une redirection 301, l’une des règles doit contenir les drapeaux *L,R=301* :

```none
RewriteEngine on
RewriteCond TestString CondPattern [flags]
RewriteRule URL_path Substitution [L,R=301]
```

L’**accès à de nombreuses variables d’en-tête et de serveur** de la forme *%{HTTP\_HOST}, %{REQUEST\_URI}*, etc. est garanti au sein des règles et conditions de redirection. Elles peuvent être reliées par des opérateurs et traitées à l’aide de fonctions. Il est ainsi permis de réaliser pratiquement n’importe quelle redirection souhaitée, même si la syntaxe n’est pas d’un abord intuitif.

Examinons un exemple de 301 Redirect réalisé à l’aide de *mod\_rewrite*. Nous souhaitons forcer des [URL canoniques](https://www.ionos.fr/digitalguide/web-marketing/search-engine-marketing/les-balises-canoniques/ "Les balises canoniques") pour éviter le contenu dupliqué. Cela signifie que toutes les URL doivent commencer par HTTPS et WWW, quelle que soit la manière dont les visiteurs accèdent au contenu.

Nous définissons deux conditions de redirection, que nous relions les unes aux autres par le drapeau OR. La première condition teste si HTTPS est désactivé, la deuxième condition vérifie si le WWW de tête ne précède pas le domaine. Nous utilisons le drapeau NC pour désactiver la distinction entre majuscules et minuscules. Si l’une des deux conditions est vérifiée, **nous redirigeons l’URL vers sa version HTTPS-WWW par 301 Redirect**. Nous utilisons l’expression régulière (.\*), qui récupère n’importe quelle URL, et l’accole derrière le domaine en utilisant $1 :

```none
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]
```

## Quels sont les problèmes et les dangers liés à l’utilisation de 301 Redirects ?

Les redirections de type 301 Redirect sont des outils standard dans le domaine du développement Web et du référencement. Cependant, il convient de procéder à la configuration avec prudence, car d’importants problèmes peuvent se produire si les redirections **sont utilisées de manière incorrecte.** Le serveur peut par exemple planter ou le site peut dégringoler dans le classement des moteurs de recherche.

```none
### Corruption du fichier .htaccess lors d’une modification manuelle
```

Le fichier .htaccess configure le serveur Web Apache au niveau du répertoire. Même les modifications incorrectes les plus infimes apportées au fichier .htaccess **peuvent irrémédiablement conduire à un site Web inaccessible**. La fameuse [erreur serveur 500](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/http-error-500-trucs-astuces-pour-resoudre-ce-probleme/ "HTTP-Error 500") ou [page blanche WordPress](https://www.ionos.fr/digitalguide/hebergement/cms/erreur-wordpress/ "Page blanche WordPress") risquent alors de se produire.

Il est préférable de **créer une copie du fichier .htaccess avant de le modifier**. Ceci est très facile en partant de la ligne de commande. Nous basculons dans le répertoire Web public du site et utilisons la commande *cp* :

```none
cp -a .htaccess _htaccess
```

Si des erreurs se produisent à la suite de la modification du fichier .htaccess, **nous restaurons la version originale**:

```none
cp -a _htaccess .htaccess
```

```none
### Chaînes et boucles de redirection
```

Les redirections sont utiles, mais se traduisent par un cycle requête-réponse complet et « coûteux ». Les utilisateurs doivent patienter lorsque les redirections sont enchaînées, ce qui se traduit par un taux de rebond accru. De plus, les moteurs de recherche évaluent **les pages qui se redirigent plusieurs fois de suite de manière négative**. Un maximum de trois redirections successives est généralement admis.

Les boucles de redirection, dans lesquelles **deux adresses se redirigent mutuellement sans fin**, sont fatales. Ceci se traduit par une [erreur de navigateur ERR\_TOO\_MANY\_REDIRECTS](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/err-too-many-redirects/ "ERR_TOO_MANY_REDIRECTS") pour l’utilisateur. La ressource souhaitée est donc inaccessible. D’une manière générale, il est recommandé de tester les redirections nouvellement configurées avec cURL pour s’assurer que le résultat souhaité est atteint.

```none
### Empoisonnement accidentel du cache lors de l’utilisation de la redirection 301
```

Une mauvaise utilisation de 301 Redirect peut devenir un vrai casse-tête par la suite. Contrairement aux redirections temporaires des types 302, 303 et 307, **la redirection 301 indique au client de mettre la nouvelle URL en cache**. Si l’on souhaite revenir ultérieurement à l’URL d’origine, les clients y resteront insensibles et continueront inlassablement à se connecter à la nouvelle URL. L’utilisation de redirections temporaires ou la définition de l’en-tête Cache-Control par une valeur appropriée permet de contrecarrer cet effet.

Nous avons réglé l’en-tête Cache-Control sur une heure lors de la définition de la règle Redirect 301 dans .htaccess. Cela permet de s’assurer que **les modifications ultérieures apportées à la destination de redirection** parviennent à tous les clients :

```none
ExpiresActive on
ExpiresDefault "access plus 1 hour"
Redirect 301 / https://www.example.com/
```

En cas d’utilisation de redirections complexes avec des directives de réécriture, nous avons recours à une astuce pour définir l’en-tête Cache-Control. Nous définissons une variable d’environnement *limitcache* dans le cadre de la règle de redirection 301. Nous définissons ensuite **l’en-tête, en lisant la variable d’environnement comme condition**. Ceci permet de s’assurer que l’en-tête correct est défini lors de la redirection :

```none
RewriteRule ^.* http://www.example.com/ [L,R=301,E=limitcache:1]
Header always set Cache-Control "max-age=3600" env=limitcache
```

Conseil Vous avez suivi une redirection 301 et le navigateur refuse maintenant d’accéder à l’adresse d’origine ? Il suffit d’accoler une chaîne de requête avec un contenu quelconque sous la forme ?foo=bar à l’ancienne adresse et de forcer ainsi le navigateur à charger l’URL.


This is a markdown version of: [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/redirection-301/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/redirection-301/) for AI/LLM consumption.