2010-08-11 4 views
0

J'ai un petit problème avec la redirection. Les utilisateurs enregistrés suivent ce lien site.com/reg.php?passkey=1234 mais le premier utilisateur est redirigé vers la langue correcte basée sur un cookie. Je dois conserver la variable de clé lorsque l'utilisateur est redirigé. comme celui-ci ?lang=en_US&passkey=1234problème se rediriger pour fonctionner correctement php

Mon code pour chercher bien loin quelque chose comme ceci:

if (!isset($_GET['lang'])) 
{ 

     if (isset($_COOKIE['country'])) 
     { 

       $country = $_COOKIE['country']; 

       (...) 

       elseif ($country == "US"){  

       $variables = $_GET; 
       $variables['lang'] = "en_US"; 

       header('Location: ?' . http_build_query($variables)); 

       exit(); 
       } 

Cela fonctionne:

reg.php 
reg.php?lang=en_US 
reg.php?lang=en_US&passkey=test 
reg.php?passkey=test&lang=en_US 

mais cela donne une erreur The page isn't redirecting properly

reg.php?passkey=test 

Je ne comprendre pourquoi cela ne fonctionne pas lorsque toutes les autres combinaisons semblent fonctionner parfaitement.

+3

[Location] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30) nécessite une adresse URI absolue. – Gumbo

+0

Comment ressemble votre fonction http_build_query()? – Centurion

+0

Comme ça: http://at.php.net/http_build_query ;-) – Sebs

Répondre

0

HTTP 1.1 Spécification exige que l'emplacement doit être un URI absolu (Voir RFC2616 14,30 Localisation)

L'emplacement header('Location: ?' . http_build_query($variables)); ne contient pas d'URI absolue.

Vous avez besoin quelque chose comme:

header('Location: /folder/file.php?'.http_build_query($variables)); 

Si vous devez le faire sur différentes locantions vous pouvez utiliser $_SERVER['PHP_SELF'] pour définir le fichier actuel comme emplacement de redirection. Par exemple

header('Location: '.$_SERVER['PHP_SELF'].'?'.http_build_query($variables)); 
+0

Cela ne fonctionnera pas pour mon site et il semble fonctionner sans l'emplacement complet. Je pense que le problème est qu'il ne cesse de rediriger une quantité infinie de fois pour une raison quelconque. – ganjan

+0

Vous pouvez obtenir le chemin du fichier actuel sur votre serveur si vous avez besoin de réutiliser ce code dans différents fichiers de différentes sources par exemple avec $ _SERVER ['PHP_SELF'] – Dubas

+0

header ('Location:'. $ _ SERVER ['PHP_SELF' ]. '?'. http_build_query ($ variables)); donne le même résultat – ganjan

0

Je pense, vous devriez changer le http_build_query($variables)-http_build_query($variables, null, '&')

J'espère que ma réponse est utile.

Questions connexes