HTTP 301

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 29 décembre 2020 à 17:17 et modifiée en dernier par Thibaut120094 (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

HTTP 301 Moved Permanently (ou 301 redirect) est un code de réponse HTTP qui est utilisé pour une redirection d'URL permanente, c'est-à-dire, pour indiquer que les liens actuels ou les enregistrements qui utilisent l'URL pour lesquels il a été recu doivent être modifiés. Le nouvel URL doit être donné dans le champ « Location » inclus dans la réponse. Le code 301 redirect est considéré comme le meilleur moyen de mettre à niveau les utilisateurs de HTTP vers HTTPS[1].

La RFC 2616[2] définit que :

  • Si un client a la possibilité d'éditer les liens, il doit mettre à jour les références vers l'URL demandée.
  • La réponse peut être mise en cache[3].
  • La réponse doit contenir une petite note hypertexte avec un hyperlien vers le/les nouveaux URL(s), sauf si la méthode de la demande était HEAD.
  • Si le statut 301 est reçu en réponse à une requête autre que GET ou HEAD, le client doit demander à l'utilisateur avant de le rediriger.

Exemple

Requête Client:

GET /index.php HTTP/1.1
Host: www.example.org

Réponse serveur:

HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp

Voici un exemple utilisant les fichiers .htaccess pour rediriger un URL non sécurisé vers une adresse sécurisée sans le "www":

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

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

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L] 

Voici un exemple utilisant une redirection PHP

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://example.com/newpage.html");
exit();
?>

Voici une exemple d'une simplicité équivalente pour une configuration nginx:

location /old/url/ {
    return 301 /new/url;
}

Moteurs de recherche

Les moteurs de recherche Bing et Google recommandent la redirection 301 pour changer l'URL d'une page[4],[5].

Voir aussi

Notes et références

  1. (en) « Secure your site with HTTPS », sur support.google.com, Google (consulté le ).
  2. (en) Request for comments no 2616
  3. (en) « How long do browsers cache HTTP 301s? », sur Stack Overflow (consulté le ).
  4. (en) « Site Move Tool - Bing Webmaster Help How-to » (consulté le ).
  5. (en) « 301 redirects - Google Webmaster Tools Help » (consulté le ).