Comment créer une redirection en PHP
Sep 16, 2026
/
By Faradilla A.
/
6 minutes de lecture
Une redirection PHP est une méthode côté serveur qui utilise la fonction header() de PHP pour rediriger le navigateur web de l’utilisateur vers une autre URL.
Elle sert principalement à contrôler le flux de navigation, à améliorer l’expérience utilisateur en dirigeant les visiteurs vers le contenu pertinent et à favoriser le référencement naturel (SEO) en informant les moteurs de recherche des modifications apportées aux pages.
Pour créer une redirection en PHP, utilisez la fonction header() pour envoyer un en-tête HTTP Location au navigateur web.
Cette commande doit être exécutée avant l’envoi de tout code HTML ou texte. Il est également recommandé d’ajouter exit; immédiatement après pour interrompre l’exécution du script.
Comment effectuer une redirection avec la fonction header() de PHP
Pour rediriger un utilisateur vers une autre page en PHP, utilisez la fonction header() pour spécifier la nouvelle URL.
Voici la syntaxe de base :
<?php
// Redirect to a new page
header("Location: newpage.php");
exit; // This stops the script from executing after the redirect
?>La règle la plus importante concernant la fonction header() est de l’appeler avant d’envoyer la moindre sortie au navigateur web. Cela inclut tout code HTML, les espaces et même les sorties générées par une instruction echo.
Exemples simples de redirection en PHP
Voici un exemple simple de redirection en PHP vers une autre page du même site web (une URL relative) :
<?php
// Redirects to contact-us.php in the same directory
header("Location: contact-us.php");
exit;
?>L’exemple suivant montre comment rediriger l’utilisateur vers un autre site web (une URL absolue) :
<?php
// Redirects to Google
header("Location: https://www.google.com");
exit;
?>
Veillez à toujours ajouter exit; ou die(); juste après la fonction header(). Le reste du script ne sera ainsi pas exécuté, ce qui est essentiel pour la sécurité et le contrôle du flux d’exécution.
Redirection PHP avec des codes d’état (301 ou 302)
Pour effectuer une redirection en PHP avec un code d’état HTTP spécifique, comme 301 ou 302, ajoutez ce code en tant que paramètre facultatif de la fonction header().
Par défaut, header(‘Location: …’) envoie une redirection temporaire 302. Pour spécifier un code, utilisez les paramètres facultatifs de la fonction : header(“Location: URL”, true, 301).
Le paramètre true indique que l’en-tête existant doit être remplacé, tandis que 301 correspond au code HTTP envoyé.
Utilisez une redirection permanente 301 lorsque l’URL d’une page a changé définitivement. Cette redirection est importante pour le référencement naturel : elle indique aux moteurs de recherche qu’ils doivent mettre à jour leur index et permet de transmettre les signaux de classement à la nouvelle URL.
Choisissez une redirection temporaire 302 lorsque le changement est provisoire, par exemple pendant une opération de maintenance, et que l’ancienne URL sera réutilisée. Elle indique aux moteurs de recherche qu’ils ne doivent pas mettre à jour leur index, puisque la page d’origine sera de nouveau accessible.
<?php
// Temporary redirect
header("Location: https://www.domain.tld/maintenance.php", true, 302);
exit;
?>Si vous rencontrez l’erreur « headers already sent », elle peut être due à des espaces ou à d’autres paramètres définis dans votre fichier php.ini.
Qu’est-ce qu’une redirection conditionnelle en PHP ?
Une redirection conditionnelle en PHP consiste à utiliser des instructions if ou d’autres expressions logiques pour déterminer si une redirection doit avoir lieu.
Vous pouvez ainsi créer des parcours de navigation plus dynamiques et mieux adaptés à vos utilisateurs, en les dirigeant vers la bonne page selon des critères précis.
Par exemple, vous pouvez vérifier qu’un utilisateur est connecté avant d’afficher une page réservée aux membres, ou rediriger les utilisateurs vers une version de votre site optimisée pour les appareils mobiles lorsqu’ils y accèdent depuis un téléphone.
Redirection PHP après la connexion ou en fonction de la session
Pour rediriger un utilisateur après sa connexion ou en fonction de sa session en PHP, vérifiez la variable $_SESSION pour déterminer s’il est authentifié.
Pour cela, démarrez la session en haut de votre script avec session_start();.
Le script suivant vérifie si un user_id est défini dans la session. Si ce n’est pas le cas, il redirige l’utilisateur vers la page de connexion.
<?php
session_start();
// Check if the user is logged in
if (!isset($_SESSION['user_id'])) {
// User is not logged in, redirect to login page
header("Location: login.php");
exit;
}
// If we get here, the user is logged in
// Continue loading the protected page content...
echo "Welcome to the members-only area!";
?>À l’inverse, sur la page de traitement de la connexion, redirigez l’utilisateur vers le tableau de bord après avoir vérifié ses identifiants et défini la variable de session correspondante :
<?php
// (After verifying username and password...)
// Set session variable
$_SESSION['user_id'] = $user_id_from_db;
// Redirect to the user dashboard
header("Location: dashboard.php");
exit;
?>Redirection PHP en fonction de l’appareil de l’utilisateur
Pour rediriger les utilisateurs en PHP en fonction de leur appareil, vérifiez la chaîne HTTP_USER_AGENT. Cette chaîne, disponible dans la superglobale $_SERVER, contient des informations sur le navigateur web et le système d’exploitation de l’utilisateur.
Bien que la détection de l’agent utilisateur ne soit pas toujours fiable, une simple vérification de la présence de mots-clés courants associés aux appareils mobiles peut suffire pour effectuer des redirections simples.
<?php
// Get the user agent string
$user_agent = $_SERVER['HTTP_USER_AGENT'];
// Array of mobile keywords
$mobile_keywords = ['Mobile', 'Android', 'iPhone', 'iPad', 'Windows Phone'];
$is_mobile = false;
// Check if any mobile keyword is present in the user agent
foreach ($mobile_keywords as $keyword) {
if (strpos($user_agent, $keyword) !== false) {
$is_mobile = true;
break; // Found a mobile keyword, no need to check further
}
}
// If it's a mobile device, redirect to the mobile site
if ($is_mobile) {
header("Location: https://m.domain.tld");
exit;
}
// Otherwise, load the desktop site
// ...
?>
Cette méthode n’est pas infaillible. Le responsive design constitue une solution plus fiable : il adapte la mise en page de votre site à la taille de l’écran sans nécessiter de redirection.
Quelles sont les alternatives aux redirections en PHP ?
Bien que header(‘Location: …’) soit la méthode standard et la plus fiable pour effectuer des redirections côté serveur en PHP, il existe d’autres solutions, principalement pour les redirections côté client ou comme solutions de secours.
Elles sont utiles si des données ont déjà été envoyées au navigateur et que vous ne pouvez plus utiliser la fonction header().
- Redirection JavaScript. Elle s’effectue entièrement dans le navigateur web de l’utilisateur. Elle est moins adaptée au référencement naturel (SEO), car elle ne transmet pas de code d’état 301 ou 302, peut ne pas être détectée par les robots d’indexation et ne fonctionne pas si JavaScript est désactivé. Elle peut toutefois servir de solution de secours une fois le chargement de la page commencé.
<script>
window.location.replace("https://www.domain.tld/new-page.html");
</script>- Balise HTML meta refresh. Cette ancienne balise HTML indique au navigateur web d’actualiser la page ou de rediriger l’utilisateur vers une nouvelle URL après un délai défini. Un délai de 0 seconde déclenche une redirection immédiate.
<meta http-equiv="refresh" content="0;url=https://www.domain.tld/new-page.html">
- Helpers de framework. Les frameworks modernes proposent souvent des fonctions intégrées plus faciles à gérer que les en-têtes bruts. Vous pouvez par exemple utiliser le helper de redirection de CodeIgniter ou le helper redirect() de Laravel, après avoir installé Composer.
La fonction header() doit toujours être votre premier choix. N’utilisez les alternatives côté client que lorsqu’une redirection côté serveur est techniquement impossible, par exemple lorsque les en-têtes ont déjà été envoyés.
N’utilisez jamais de redirections côté client pour des opérations sensibles telles que l’authentification ou le contrôle d’accès, car un attaquant peut facilement les contourner.
Du point de vue de l’accessibilité, certains lecteurs d’écran gèrent mieux les redirections meta refresh que les redirections JavaScript, mais ces deux méthodes sont moins sûres que header().
Si vous souhaitez découvrir des solutions plus robustes pour développer votre application au-delà des scripts PHP classiques, consultez notre guide consacré aux meilleurs frameworks PHP.
Prochaines étapes : comment gérer les erreurs PHP
Les redirections échouent principalement en raison d’erreurs de configuration ou de l’envoi prématuré d’une sortie, car aucune sortie ne peut être envoyée au navigateur web avant l’appel de la fonction header().
L’erreur la plus courante est la suivante :
Warning: Cannot modify header information - headers already sent
Cette erreur signifie qu’une sortie a été envoyée au navigateur web avant l’appel de la fonction header(). Il peut s’agir des éléments suivants :
- HTML. Toute balise HTML, même une déclaration <!DOCTYPE>.
- Espaces. Un espace ou un retour à la ligne avant la balise d’ouverture <?php dans n’importe quel fichier.
- Sortie PHP. Toute instruction echo ou print.
- Messages d’erreur. Une notice ou un avertissement PHP s’affiche.
- BOM (marque d’ordre des octets). Des caractères invisibles peuvent être ajoutés lorsqu’un fichier est enregistré en UTF-8 avec BOM, notamment avec certains anciens éditeurs de texte.
Pour résoudre le problème, suivez l’exécution de votre code afin d’identifier l’origine de la première sortie. Recherchez les instructions echo ou print, le code HTML situé en dehors des balises <?php … ?>, ainsi que les éventuels espaces placés avant la balise d’ouverture <?php.
Si l’erreur persiste, vérifiez tous les fichiers inclus avec include ou require avant l’exécution de la logique de redirection.
Tout le contenu des tutoriels de ce site est soumis aux normes éditoriales et aux valeurs rigoureuses de Hostinger.
Commentaires
0 responses