重定向正常工作的问题php

时间:2010-08-11 13:57:59

标签: php url redirect url-rewriting header

重定向有点问题。注册用户使用此链接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 :(得分:0)

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

答案 1 :(得分:0)

我认为,您应该将http_build_query($variables)更改为http_build_query($variables, null, '&')

我希望我的回答很有用。