web-dev-qa-db-fra.com

Comment rediriger vers la même page dans PHP

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?

27
user710502

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);

$location est le chemin après le domaine, en commençant par /.

11
Nicole

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';
70
Syntax Error

Un autre élégant est 

header("Location: http://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]");
exit;
19
Nabil Kadimi

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

8
squarecandy
header('Location: '.$_SERVER['PHP_SELF']);  

travaillera aussi

1
Mahendra Jella

Une approche simple et rapide si vous n'êtes pas concerné par les paramètres de requête:

header("location: ./");
0
digout

J'ai juste essayé d'utiliser header("Location: "); (sans valeur) et il a été redirigé vers la page en cours. 

0
user10141671

La ligne simple ci-dessous fonctionne très bien:

header("Location: ?");
0
Sergey