不完整的GET值

Juv*_*era 1 php get

好的,所以我有我的post.php页面.如果您还没有登录,您将被重定向到login.php,所以这是我的代码

if($login == 0) {
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("Location: login.php?r=".$url);
}
Run Code Online (Sandbox Code Playgroud)

在我的login.php页面中(如果用户名和密码正确,我只会创建一个快捷方式)

if($accountmatch == 1) {
    // make sessions
    if(isset($_GET['r'])) {
        $r = $_GET['r'];
        header("Location: ".$r);
    } else {
        header("Location: index.php);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是这个,当我登录时,页面将我引导到我想要的页面,但GET值不完整.

例如,$ r的值是

localhost/mywebsite/post.php?mode=addtopic&f=1
Run Code Online (Sandbox Code Playgroud)

所以当我到达login.php页面时,网址是

localhost/mywebsite/login.php?r=http://localhost/mywebsite/post.php?mode=addtopic&f=1
Run Code Online (Sandbox Code Playgroud)

因此,当我登录时,它会将我重定向到此页面.

localhost/mywebsite/post.php?mode=addtopic
Run Code Online (Sandbox Code Playgroud)

很明显,"&"符号结束了我的网址,使f在我的原始网址中分开.

我怎么能附上它们?先感谢您!

编辑

我知道我可以用它

$f = $_GET['f'];

header("Location: ".$r."&f=".$f);
Run Code Online (Sandbox Code Playgroud)

但还有其他方法吗?谢谢!

Cod*_*ter 6

看看这个urlencode()功能.

请注意XSRF,如果我发送用户,http://yoursite/login.php?r=http://mysitethattotallylookslikeyours/pleaseLoginAgainAnErrorHasOccurred.php他们可能会放弃他们的凭据.

要做到这一点,您可以使用路径和查询字符串作为值r,并重定向到"http://yoursite/" . $r.