Comment récupérer l’URL de la page courante en PHP ?
📌 L’essentiel à retenir
Pour récupérer l’URL de la page courante en PHP, on utilise la variable superglobale $_SERVER. Trois informations sont nécessaires : le protocole (HTTP ou HTTPS) via $_SERVER[‘HTTPS’], le nom de domaine via $_SERVER[‘HTTP_HOST’], et le chemin de la page via $_SERVER[‘REQUEST_URI’]. En concaténant ces trois éléments, vous obtenez l’URL complète de la page visitée. Cette technique fonctionne sur tous les serveurs web compatibles PHP, y compris dans WordPress.
Je n’ai jamais trop abordé la programmation informatique sur ce site, son but premier étant d’apporter des ressources gratuites aux personnes les moins à l’aise avec l’informatique. La programmation et l’apprentissage de langages informatiques semblent donc, à la base, loin des préoccupations du cœur du lectorat d’Astuces & Aide Informatique. Cependant, et depuis un moment déjà, j’ai décidé d’élargir les sujets traités et donc de créer du contenu gratuit pour les webmasters et les professionnels du web en parlant à la fois des CMS (et notamment du plus utilisé d’entre eux, WordPress), de webmarketing, de SEO, mais aussi de langage de programmation. Ce sera le cas aujourd’hui avec un article sur l’un des langages informatiques les plus utilisés, PHP. On commence doucement avec un petit script en PHP qui vous permet d’afficher l’URL de la page courante visitée.
Afficher l’URL de la page courante en PHP
Je ne vous rappellerai pas ici la syntaxe de PHP, ses prérequis, comment cela fonctionne, etc. Le but est juste de vous donner ce bout de code qui vous permet de récupérer l’URL de la page visitée en cours. Mais il vous faudra un minimum de connaissance sur PHP ou sur les langages de programmation pour vous en sortir.
Pour obtenir l’URL de la page web affichée, il vous faudra récupérer dans votre script trois informations :
- Le protocole utilisé par le serveur web : http ou sa version sécurisée, https en se servant de la variable $_SERVER,variable PHP qui contient de nombreuses informations sur le serveur. Nous utiliserons donc $_SERVER[‘HTTPS’] pour savoir si le serveur utilise ou non la version sécurisée de http.
- Le nom de domaine du site grâce à $_SERVER[‘HTTP_HOST’] qui permet de récupérer le nom de domaine du site de la page visitée (ou par défaut son adresse IP si le site ne possède pas de nom de domaine).
- La page courante que vous visitez. Si vous souhaitez juste obtenir la page, utilisez de préférence $_SERVER[‘PHP_SELF’]. Cependant, il peut-être très utile de récupérer les paramètres de la requête, c’est-à-dire tout ce qui suit le point d’interrogation (?). Ex : index.php?categorie=3&page=2 Dans ce cas précis, nous utiliserons plutôt $_SERVER[‘REQUEST_URI’] pour obtenir l’URL complète de la page courante.
Trêve de blabla, voici un petit code pour récupérer l’adresse de la page courante :
<?php
// protocole utilisé : http ou https ?
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') $url = "https://"; else $url = "http://";
// hôte (nom de domaine voire adresse IP)
$url .= $_SERVER['HTTP_HOST'];
// emplacement de la ressource (nom de la page affichée). Utiliser $_SERVER['PHP_SELF'] si vous ne voulez pas afficher les paramètres de la requête
$url .= $_SERVER['REQUEST_URI'];
// on affiche l'URL de la page courante
echo $url;
?>
Cas particulier : serveur derrière un reverse proxy ou un load balancer
Si votre site est hébergé derrière un reverse proxy (Nginx devant Apache, par exemple) ou un CDN comme Cloudflare, la variable $_SERVER['HTTPS'] peut ne pas être définie, même si vos visiteurs accèdent à votre site en HTTPS. Le proxy gère le certificat SSL et transmet la requête en HTTP simple au serveur PHP.
Pour gérer cette situation, vérifiez l’en-tête HTTP_X_FORWARDED_PROTO :
<?php
if (
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
|| $_SERVER['SERVER_PORT'] == 443
) {
$protocole = 'https';
} else {
$protocole = 'http';
}
?>
Ce code couvre les trois cas possibles : connexion HTTPS directe, proxy qui transmet le protocole original, et détection par le port 443.
Attention à la sécurité : protégez-vous contre les failles XSS
Un point que beaucoup de tutoriels PHP oublient de mentionner : la variable $_SERVER[‘PHP_SELF’] peut être exploitée par un attaquant. Si un utilisateur malveillant modifie l’URL de votre page en y injectant du code JavaScript, ce code sera exécuté dans le navigateur des visiteurs. C’est ce qu’on appelle une faille XSS (Cross-Site Scripting).
Pour vous protéger, utilisez systématiquement la fonction htmlspecialchars() lorsque vous affichez une valeur provenant de $_SERVER dans votre page HTML :
<?php
$url = htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
echo $url;
?>
Cette fonction remplace les caractères spéciaux (comme < et >) par leur équivalent HTML, ce qui empêche le navigateur d’interpréter du code injecté. C’est un réflexe à adopter dès que vous affichez des données provenant de l’utilisateur ou du serveur.
Créer une fonction PHP réutilisable pour récupérer l’URL
Si vous avez besoin de récupérer l’URL courante à plusieurs endroits de votre site, le plus pratique est de créer une fonction dédiée. Voici un exemple qui gère à la fois le protocole, le nom de domaine et les paramètres de la requête :
<?php
function getUrlCourante() {
$protocole = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$hote = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
return $protocole . '://' . $hote . $uri;
}
// Utilisation
$url = getUrlCourante();
echo htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
?>
Vous pouvez placer cette fonction dans un fichier functions.php et l’appeler partout où vous en avez besoin. Notez que l’appel à htmlspecialchars() se fait au moment de l’affichage, pas dans la fonction elle-même : cela vous permet de manipuler l’URL en toute sécurité avant de l’afficher.
Quand utiliser la récupération de l’URL courante en PHP ?
Récupérer l’URL de la page en cours ne sert pas uniquement à l’afficher. Voici quatre situations fréquentes où cette technique est utile :
Générer une balise canonical
La balise <link rel="canonical"> indique aux moteurs de recherche quelle est l’URL de référence d’une page. En PHP, vous pouvez construire cette balise automatiquement avec la fonction vue plus haut.
Créer un fil d’Ariane dynamique
En analysant les segments de $_SERVER['REQUEST_URI'] avec la fonction explode('/', $uri), vous pouvez générer un breadcrumb qui reflète la structure de vos pages.
Rediriger l’utilisateur après connexion
Stockez l’URL courante en session avant d’envoyer le visiteur vers la page de connexion. Une fois connecté, redirigez-le vers la page qu’il consultait.
Gérer la pagination
En combinant $_SERVER['REQUEST_URI'] avec les fonctions parse_url() et http_build_query(), vous pouvez ajouter ou modifier un paramètre de page sans perdre les autres paramètres de l’URL.
Récupérer l’URL de la page courante dans WordPress
Vous utilisez peut-être WordPress et souhaitez utiliser ce code ? Sachez que c’est tout à fait possible !
Pour cela, je vous conseille la lecture de mon article sur l’utilisation de code PHP dans WordPress et ceux dédiés aux shortcodes sur mon site dédié au CMS numéro un dans le monde.
Voilà, j’espère que ce tutoriel vous sera utile pour vos projets PHP !
Questions fréquentes sur la récupération de l’URL en PHP
Quelle est la différence entre $_SERVER[‘PHP_SELF’] et $_SERVER[‘REQUEST_URI’] ?
$_SERVER[‘PHP_SELF’] renvoie uniquement le chemin du script PHP en cours, sans les paramètres de la requête (ce qui suit le « ? » dans l’URL). $_SERVER[‘REQUEST_URI’] renvoie le chemin complet avec tous les paramètres. Si votre URL est index.php?page=2, PHP_SELF renverra /index.php et REQUEST_URI renverra /index.php?page=2.
Comment vérifier si un site utilise HTTPS en PHP ?
Utilisez la condition isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'. Si votre serveur utilise un reverse proxy, vérifiez aussi l’en-tête $_SERVER[‘HTTP_X_FORWARDED_PROTO’] qui peut contenir la valeur « https » même quand $_SERVER[‘HTTPS’] n’est pas défini.
$_SERVER[‘PHP_SELF’] présente-t-il un risque de sécurité ?
Oui. $_SERVER[‘PHP_SELF’] peut être manipulé par un utilisateur malveillant pour injecter du code JavaScript (faille XSS). Si vous affichez cette variable dans votre page HTML, utilisez la fonction htmlspecialchars() pour échapper les caractères spéciaux et neutraliser toute injection.
Comment récupérer uniquement les paramètres de l’URL en PHP ?
Utilisez $_SERVER[‘QUERY_STRING’] pour obtenir la chaîne de paramètres brute (tout ce qui suit le « ? »). Pour accéder directement à un paramètre précis, la variable $_GET[‘nom_du_parametre’] est plus adaptée.
Ce code fonctionne-t-il avec toutes les versions de PHP ?
La variable $_SERVER existe depuis PHP 4.1.0. Le code présenté dans cet article est compatible avec PHP 5, 7 et 8. Aucune adaptation n’est nécessaire pour les versions récentes de PHP.
Comment récupérer l’URL courante dans WordPress sans écrire de PHP ?
WordPress propose des fonctions natives comme home_url(add_query_arg(null, null)) ou la combinaison de site_url() et $_SERVER['REQUEST_URI']. Ces fonctions s’utilisent dans les fichiers de thème ou via un shortcode personnalisé.





Commentaires
Laisser un commentaire