Testez vos redirections web et réponses HTTP
La redirection 301
La redirection 301, ou redirection permanente, indique au navigateur web et aux robots des moteurs de recherche que la page visitée a définitivement changé d’adresse. Les moteurs de recherche mettent à jour leur index et transfèrent le « poids » SEO vers la nouvelle URL.
Redirection 301 en PHP
À placer au tout début du fichier PHP, avant tout affichage HTML :
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.exemple.net/nouvelle-page.php");
exit();
?>
Redirection 301 avec un fichier .htaccess (Apache)
Méthode simple avec la directive RedirectPermanent :
Rediriger une page :
RedirectPermanent /repertoire/ancienne-page.html https://www.exemple.net/nouvelle-page.html
Rediriger un répertoire entier :
RedirectPermanent /ancien-repertoire https://www.exemple.net/nouveau-repertoire
Rediriger un domaine entier :
RedirectPermanent / https://www.exemple.net/
Redirection 301 avec mod_rewrite (.htaccess)
Plus puissant, mod_rewrite permet d’utiliser des expressions régulières. Exemples courants :
Forcer le HTTPS (HTTP → HTTPS) :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Forcer le www (non-www → www) :
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Supprimer le www (www → non-www) :
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]
Rediriger une ancienne URL vers une nouvelle :
RewriteEngine On
RewriteRule ^ancienne-page\.html$ /nouvelle-page.html [L,R=301]
Redirection 301 avec Nginx
Dans le fichier de configuration Nginx (bloc server) :
Rediriger une page précise :
location = /ancienne-page.html {
return 301 https://www.exemple.net/nouvelle-page.html;
}
Forcer le HTTPS :
server {
listen 80;
server_name exemple.net www.exemple.net;
return 301 https://$host$request_uri;
}
Forcer le www :
server {
listen 443 ssl;
server_name exemple.net;
return 301 https://www.exemple.net$request_uri;
}
Supprimer le www :
server {
listen 443 ssl;
server_name www.exemple.net;
return 301 https://exemple.net$request_uri;
}
À noter : les codes 307 (redirection temporaire qui conserve la méthode HTTP) et 308 (redirection permanente qui conserve la méthode HTTP) existent aussi mais restent peu utilisés en pratique.