Comment puis-je rediriger vers la même page en utilisant PHP?
Par exemple, localement, mon adresse Web est la suivante:
http://localhost/myweb/index.php
Comment puis-je rediriger mon site vers une autre page, par exemple:
header("Location: clients.php");
Je sais que cela pourrait être faux, mais ai-je vraiment besoin de mettre le tout? Et si plus tard ce n'est pas http://localhost/
?
Y a-t-il un moyen de faire quelque chose comme ça? En outre, j'ai beaucoup de code, puis à la fin, une fois le traitement de code terminé ... je tente de rediriger en utilisant cela. Est-ce que ça va?
Il existe plusieurs propriétés $_SERVER
( docs ) qui renvoient des informations sur la page en cours, mais ma méthode préférée consiste à utiliser $_SERVER['HTTP_Host']
:
header("Location: " . "http://" . $_SERVER['HTTP_Host'] . $location);
où $location
est le chemin après le domaine, en commençant par /
.
Ma méthode préférée pour recharger la même page est $ _SERVER ['PHP_SELF']
header('Location: '.$_SERVER['PHP_SELF']);
die;
N'oubliez pas de mourir ou de sortir après votre en-tête ();
Edit: (Merci @RafaelBarros)
Si la chaîne de requête est également nécessaire, utilisez
header('Location:'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
die;
Edit: (merci @HugoDelsing)
Lorsque la manipulation de l'URL htaccess est en jeu, la valeur de $ _SERVER ['PHP_SELF'] peut vous amener au mauvais endroit. Dans ce cas, les données URL correctes seront dans $_SERVER['REQUEST_URI']
pour votre redirection, ce qui peut ressembler à la réponse de Nabil ci-dessous:
header("Location: http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]");
exit;
Vous pouvez également utiliser $ _SERVER [REQUEST_URI] pour attribuer la valeur correcte à $_SERVER['PHP_SELF']
si vous le souhaitez. Cela peut aider si vous utilisez beaucoup une fonction de redirection et que vous ne voulez pas la changer. Il suffit de définir la valeur correcte dans votre gestionnaire de demandes comme ceci:
$_SERVER['PHP_SELF'] = 'https://sample.com/controller/etc';
Un autre élégant est
header("Location: http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]");
exit;
Pour être vraiment universel, j'utilise ceci:
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'
|| $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
header('Location: '.$protocol.$_SERVER['HTTP_Host'].$_SERVER['REQUEST_URI']);
exit;
J'aime $_SERVER['REQUEST_URI']
car il respecte mod_rewrite et/ou toutes les variables GET.
détection https depuis https://stackoverflow.com/a/2886224/947370
header('Location: '.$_SERVER['PHP_SELF']);
travaillera aussi
Une approche simple et rapide si vous n'êtes pas concerné par les paramètres de requête:
header("location: ./");
J'ai juste essayé d'utiliser header("Location: ");
(sans valeur) et il a été redirigé vers la page en cours.
La ligne simple ci-dessous fonctionne très bien:
header("Location: ?");