重定向有点问题。注册用户使用此链接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
我不明白为什么当所有其他组合看起来完美无缺时,这不起作用。
答案 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, '&')
我希望我的回答很有用。