我为我的插件设计了一个登录页面,它完美地运行并检查用户凭据,但是当用户被授权时,我无法移动到px_member234.php页面。
第一页是px_myplugin234.php然后它使用include(px_login234.php)打开px_login234.php文件,用于身份验证,我想这就是为什么标头不起作用。还有其他选择吗?
<form method="post" action="">
....
</form>
authorizer(){
........
if(user_is_authorized)
{
//go to member.php page
header ("Location:px_member234.php"); << does not work
}
}
我也使用了以下内容,但它不起作用
echo '<script type="text/javascript">window.top.location="px_member234.php";</script>';
echo '<script type="text/javascript">window.location="px_member234.php";</script>';
答案 0 :(得分:2)
您可以使用标头重定向。要使用它,您必须确保在header命令之前没有输出任何内容。如果标题已经发送,则此代码不起作用
header("Location:member.php");
在您的示例中,身份验证代码必须位于页面顶部。如果在标题函数调用之前无法阻止输出,您仍然可以向html页面添加元重定向标头或使用JavaScript设置新的window.location
答案 1 :(得分:2)
这是因为您在标题之前回显了HTML内容。
当PHP看到实际输出时,它必须将所有头部刷新到apache(将它们发送到客户端)。 PHP发送标头并开始输出后,无法添加更多标头。
您的代码需要重构才能在输出任何内容之前调用header('Location: ...')
答案 2 :(得分:1)
除了在页面中提到的任何输出之前调用header()
函数之外,您还应该在Location:
和URL之间留一个空格。
你有什么:
header("Location:member.php");
什么可行:
header("Location: member.php");
根据HTTP/1.1 Header Field Definition尝试并包含完整的URI而不是相对的URI。
来自php.net:
HTTP / 1.1需要绝对URI作为»Location的参数:包括方案,主机名和绝对路径,但某些客户端接受相对URI。您通常可以使用$_SERVER['HTTP_HOST']
,$_SERVER['PHP_SELF']
和dirname()
自己创建相对URI的绝对URI。
答案 3 :(得分:0)
到表单标记,您可以添加
<form method="post" action="?noheader=true">.
?noheader = true将阻止Wordpress输出任何标题。您可以在此处查看详细信息:http://www.lessthanweb.com/blog/wordpress-and-wp_redirect-function-problem
此外,在wordpress开发中,wp_redirect比php头函数更受欢迎,因为它包含的钩子可以让它与其他插件很好地配合使用。
请注意,它需要您想要重定向用户的绝对网址。由于您正在制作插件,因此您可以使用get_option('siteurl')来获取根网址:
<?php
wp_redirect(get_option('siteurl').'px_member234.php');
exit;
?>