проблема с получением перенаправления для правильной работы php - PullRequest
0 голосов
/ 11 августа 2010

У меня небольшая проблема с перенаправлением. Зарегистрированные пользователи переходят по этой ссылке site.com/reg.php?passkey=1234, но сначала пользователь перенаправляется на правильный язык на основе cookie Мне нужно сохранить переменную passkey, когда пользователь перенаправлен. как это ?lang=en_US&passkey=1234

Мой код выглядит примерно так:

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

Это работает:

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

но это дает The page isn't redirecting properly ошибку

reg.php?passkey=test

Я не понимаю, почему это не работает, когда все другие комбинации работают идеально.

Ответы [ 2 ]

0 голосов
/ 15 июля 2013

Я думаю, вам следует изменить http_build_query($variables) на http_build_query($variables, null, '&')

Надеюсь, мой ответ полезен.

0 голосов
/ 11 августа 2010

Спецификация HTTP 1.1 требует, чтобы местоположение было Абсолютным URI (См. RFC2616 14.30 Расположение)

Местоположение header('Location: ?' . http_build_query($variables)); не содержит абсолютный URI.

Вам нужно что-то вроде:

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

Если вам нужно сделать это в разных местах, вы можете использовать $_SERVER['PHP_SELF'], чтобы установить текущий файл в качестве места перенаправления. Например

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