Les différents types de redirections Web

Il est parfois nécessaire de faire des redirections d'une page vers une autre.
Nous allons voir ici les différentes méthodes et leurs caractéristiques.

Il existe deux méthodes pour effectuer des redirections, l'une se fait au niveau du serveur lors de l'appel de la page (et donc avant son affichage) et l'autre au niveau du navigateur client où dans ce cas, la redirection se fait lors de la réception de la première page.

Il est recommandé d'utiliser autant que possible les redirections coté serveur pour une meilleure comptabilité (certaines conditions pourraient empêcher les redirections au niveau du navigateur client).

Les redirections 'serveur' et leur code HTTP

Il existe deux types de redirections 'serveur' :

Code 301 : redirection permanente
Code 302 : redirection temporaire

Vous aurez compris que pour une redirection permanente (par exemple un fichier qui a été deplacé définitivement), il vous faudra alors utiliser le code 301.
Les moteurs de recherche en tiendront compte et adapteront leur index pour pointer vers la nouvelle page.

Par contre, si pour une raison quelconque (lors d'une maintenance par exemple), vous devez faire une redirection provisoire, vous devrez alors utiliser le code 302.
Les moteurs de recherche garderont l'ancienne adresse dans leur index.

Notez que seules les redirections cotés serveurs seront prises en compte par les moteurs et garantissent ainsi un référencement correct.

Redirection serveur avec le .htaccess

Il existe plusieurs façon de faire des redirections avec le .htaccess, nous allons en voir quelques une.

Redirection permanente (301)

# Redirige une page
Redirect permanent /ancienne-page.html http://www.votre-site.com/nouvelle-page.html

# Redirige un dossier
Redirect permanent /ancien-dossier http://www.votre-site.com/nouveau-dossier


# En indiquant le code HTTP
Redirect 301 /ancien-dossier http://www.votre-site.com/nouveau-dossier

Redirect 301 /ancien-dossier http://www.votre-site.com/nouveau-dossier( RedirectPermanent, Redirect Permanent et Redirect 301 sont équivalents )

Il est aussi possible de faire des redirections à l'aide d'expressions régulières.

# Avec RedirectMatch
RedirectMatch 301 (.+)\.html$ http://www.autre-site.com/$1.html


# Avec RewriteRule (il faut activer le RewriteEngine)
RewriteEngine on
RewriteRule (.+)\.html$ http://www.autre-site.com/$1.html [R=301,L]

Redirection temporaire (302)

Il faut procéder de la même manière que pour les redirections permanentes mais en utilisant les termes suivants :
RedirectTemp, Redirect temp et Redirect 302

Redirect temp /ancienne-page.html$ http://www.votre-site.com/nouvelle-page.html

Redirection serveur avec PHP

Pour réaliser nos redirections en PHP, nous allons utiliser la fonction PHP header().

Redirection permanente (301)

header("Status: 301 Moved Permanently", false, 301);
header("Location: http://www.votresite.com/nouvelle-page.htm");
exit();

Redirection temporaire (302)

header("Status: 302 Moved Temporarily", false, 302);
header("Location: http://www.votresite.com/page-temporaire.htm");
exit();

Les méthodes qui suivent fonctionnent coté client (une fois dans le navigateur du visiteur) et ne sont pas très recomandées.
A utiliser en dernier recours, si vous n'avez pas la possibilité de faire de redirection au niveau du serveur.

Redirection client avec la balise

Ce code est à placer dans la partie <head> de votre page qui effectuera la redirection.

<meta http-equiv="Refresh" content="0; URL=http://www.votresite.com/nouvelle-page.html" />

Vous avez la possibilité ici de spécifier un délai d'attente avant la redirection, par exemple 5 secondes :

<meta http-equiv="Refresh" content="5; URL=http://www.votresite.com/nouvelle-page.html" />

Redirection client avec javascript

Ici aussi, il y a plusieurs méthodes pour y arriver.

La première fait une redirection au niveau de la fenêtre du navigateur :

<script type="text/javascript">
<!--
window.location = "http://www.votresite.com/nouvelle-page.htm";
//-->
</script>

La seconde fait une redirection au niveau du document (la différence se voit principalement lors de l'utilisation de frames) :

<script type="text/javascript">
<!--
document.location.href = "http://www.votresite.com/nouvelle-page.htm";
//-->
</script>
comments powered by Disqus