url包含参数时header()在php中不起作用?

url包含参数时header()在php中不起作用?,php,redirect,http-headers,url-redirection,http-redirect,Php,Redirect,Http Headers,Url Redirection,Http Redirect,因此,我使用$\u GET捕获URL以便稍后使用,但当我使用$\u GET时,它不会重定向 下面是我的示例代码: URL:http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1 php代码: <?php include 'init.php'; $s = trim($_GET['s']); $h = trim($_GET['h']); $i = trim($_GET['i']); $q = key_check($s,$h

因此,我使用
$\u GET
捕获URL以便稍后使用,但当我使用
$\u GET
时,它不会重定向


下面是我的示例代码: URL:
http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1

php代码:

<?php
include 'init.php';
$s = trim($_GET['s']);
$h = trim($_GET['h']);
$i = trim($_GET['i']);
$q = key_check($s,$h,$i);
if($q == 1)
{
header("location:password_active.php");
exit;
}
if($q == 0)
{
header("location:login_failed.php");
exit;
}
?>
现在,当我尝试这个,我得到了“1”,但我得到了

此网页具有重定向循环


但是我的
password\u active.php
没有任何重定向。这只是一个html页面。

尝试删除/after file.php。像index.php?i=sa

尝试删除/after file.php。与index.php?i=sa类似,用于访问脚本的URL是:

http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1
这将加载
active.php
,后者执行其角色,然后尝试发送以下标题:

header("location:password_active.php");
浏览器收到此标题,并尝试通过在查询字符串(即
?s=xxx
字符串)前的最后一个斜杠后添加
password\u active.php
来解析该相对URL

因此,您的浏览器将加载:

http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1
这将再次加载
active.php
,它将再次执行其角色,然后再次发送相同的标题,并加载此页面:

http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1
再说一遍。一次又一次。一次又一次。经过几次尝试后,您的浏览器了解出了问题并停止

您应该在HTTP头中使用绝对URL:

header("Location: /project/password_active.php");
另外,请注意,根据标准,应该如何编写HTTP头


随机注释:

  • 根据文件名,
    $s
    $h
    都是密码。您应该这样做,而不是通过URL传递它们
  • if($y | |$z==0)
    不太可能像您所想的那样工作,因为在伪代码中,它将被评估为
    if y或not z
    ,而您可能需要
    if not y和not z
    进行密码检查

另外,在
位置
头之后调用
exit()。您永远不要忘记这一点,因为这一点非常重要,如果您忘记了,可能会给脚本带来一些麻烦。

您用来访问脚本的URL是:

http://localhost/project/active.php/?s=ieugfshd&h=qwuyrbcq&i=1
这将加载
active.php
,后者执行其角色,然后尝试发送以下标题:

header("location:password_active.php");
浏览器收到此标题,并尝试通过在查询字符串(即
?s=xxx
字符串)前的最后一个斜杠后添加
password\u active.php
来解析该相对URL

因此,您的浏览器将加载:

http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1
这将再次加载
active.php
,它将再次执行其角色,然后再次发送相同的标题,并加载此页面:

http://localhost/project/active.php/password_active.php?s=ieugfshd&h=qwuyrbcq&i=1
再说一遍。一次又一次。一次又一次。经过几次尝试后,您的浏览器了解出了问题并停止

您应该在HTTP头中使用绝对URL:

header("Location: /project/password_active.php");
另外,请注意,根据标准,应该如何编写HTTP头


随机注释:

  • 根据文件名,
    $s
    $h
    都是密码。您应该这样做,而不是通过URL传递它们
  • if($y | |$z==0)
    不太可能像您所想的那样工作,因为在伪代码中,它将被评估为
    if y或not z
    ,而您可能需要
    if not y和not z
    进行密码检查

另外,在
位置
头之后调用
exit()。你永远不要忘记这一点,因为它非常重要,如果你忘记了它们,可能会给你的脚本带来一些麻烦。

我认为问题是$q既没有1也没有0。你能打印$q值并检查实际发生了什么吗?还有什么是
key\u check()
?他包括了一个文件,可能是在该文件中定义的函数?@anantkumarsingh:当然可能是在该文件中定义的,这里的问题是作者不能期望我们猜测他/她的函数的行为。@Veenex谢谢你的建议!我会处理的。我想问题是$q既没有1也没有0。你能打印$q值并检查实际发生了什么吗?还有什么是
key\u check()
?他包括了一个文件,可能是该文件中定义的函数?@anantkumarsingh:当然可能是在该文件中定义的,这里的问题是作者不能期望我们猜测他/她的函数的行为。@VeeeneX谢谢你的建议!我会处理好的,成功了!谢谢男人:-)。“顺便说一句,解释得很好。”哈里什在我的回答中补充了一些提示。与你的问题没有直接关系,但我认为这仍然是一件值得一读的好事情。它奏效了!谢谢男人:-)。“顺便说一句,解释得很好。”哈里什在我的回答中补充了一些提示。与你的问题没有直接关系,但我认为这仍然是一件值得一读的好事情。