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
都是密码。您应该这样做,而不是通过URL传递它们$h
不太可能像您所想的那样工作,因为在伪代码中,它将被评估为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谢谢你的建议!我会处理好的,成功了!谢谢男人:-)。“顺便说一句,解释得很好。”哈里什在我的回答中补充了一些提示。与你的问题没有直接关系,但我认为这仍然是一件值得一读的好事情。它奏效了!谢谢男人:-)。“顺便说一句,解释得很好。”哈里什在我的回答中补充了一些提示。与你的问题没有直接关系,但我认为这仍然是一件值得一读的好事情。