Tutoriel : savoir gérer les redirections en PHP

 
 

Par Mickaël Bertrand

Les redirections sont souvent des éléments invisibles pour le visiteur mais elles sont primordiales pour l’expérience utilisateur.

Ce sont elles qui vont permettre de diriger l’internaute d’une page à l’autre après un traitement PHP par exemple. Nous allons voir quelles sont les différentes possibilités qui s’offrent à vous.

Par exemple : Après un formulaire on souhaite rediriger l’internaute vers 2 pages spécifiques. Une page si le formulaire a été correctement rempli, dans le cas contraire on rechargera le formulaire avec les champs pré-rempli et l’indication des erreurs.

Redirection PHP via header()

Avec la fonction header() de PHP on peut renvoyer l’internaute d’une page à l’autre en PHP. Ainsi avant l’envoi du premier élément HTML (echo), on va utiliser header() pour indiquer au navigateur qu’il doit rediriger l’internaute vers une autre URL.

On va dans le cadre de cet article se limiter à 2 codes HTTP différents. Chacun ayant sa signification :

  • 301 : Moved Permanently. Correspond à une redirection permanente qui peut donc être mise en cache par les navigateurs.
  • 302 : Moved Temporarily. Redirection temporaire qui n’est pas mise en cache.

Le code pour une 301 est le suivant


header("Status: 301 Moved Permanently", false, 301);
header("Location: http://www.example.com/page-cible.html");
exit;

Redirection avec meta Refresh

La meta refresh est une balise HTML qui se place dans le head. Elle permet de rediriger l’internaute d’une URL à une autre au bout de X secondes. Le nombre de secondes pouvant être à 0 dans ce cas la redirection sera immédiate dès que le serveur aura envoyé la page HTML au navigateur.

Code pour une meta HTML refresh

Si on veut un rafraîchissement automatique dès le chargement du HTML et avant l’affichage des éléments dans le navigateur alors on met à 0 secondes :


<meta http-equiv="refresh" content="0; url=http://example.com/">

Sinon on indique le nombre de secondes avant la redirection, ici 7 secondes :


<meta http-equiv="refresh" content="7; url=http://example.com/">

Redirection avec Javascript

Ce type de redirection « au chargement de la page » est possible en Javascript.

Code pour une redirection javascript


<script type="text/javascript">
<!--
window.location.replace("http://www.example.com/");
-->
</script>

Redirection via le .htaccess

Cette méthode permet notamment de gérer l’URL rewriting de vos sites. Pour cela on va simplement définir des « rewrite rules » dans le fichier .htaccess. Fichier qui sera placé à la racine du site. Exemples :


RedirectMatch 302 out/(.*) http://www.$1
# ou bien...
#RedirectMatch 301 out/(.*) http://www.$1

Avec les lignes ci-dessus on fait une redirection générique vers un site externe. Ainsi : http://www.example.com/out/google.fr redirigera l’internaute vers http://www.google.fr. Ce type de redirection peut aussi être effectué en interne.

Point de vue SEO sur les redirections

Le référencement naturel nécessite dans la plupart des cas que vous mettiez en place des redirections 301. Google ne faisant passer le « jus » et le positionnement d’un site que dans le cas où une 301 est mise en place. Ainsi dans les guidelines de Google on apprendra qu’il faut faire des redirections 301 lors d’une refonte de site par exemple. Une erreur peut vous faire perdre l’ensemble de votre positionnement sur Google, mais aussi sur Bing ou Yahoo.

Autre chose, attention aux mauvaises gestions de pages en erreur. Certains CMS mettent en place des 301 des pages qui n’existent pas ou qui n’existent plus vers la page d’accueil. Hors, sauf cas particulier, une page n’existant pas doit présenter une erreur 40X, bien souvent ce sera une 404 Not Found.

A savoir qu’une 301 d’un site pénalisé peut transmettre la pénalité du site redirigé vers le site cible.

Nos formations PHP pour débuter

Formation à Symfony 6™

Formation pour prendre en main Symfony

  • Spécialisation PHP
  • 3 jours - 21h
  • 1800€