Php 是否使用HTTP-AUTH重定向?

Php 是否使用HTTP-AUTH重定向?,php,http,curl,Php,Http,Curl,有没有办法让PHP重定向到新页面,并传递HTTP-AUTH 我一直在使用cURL,作为第二个示例: 不幸的是,当我这样做时,实际的URL(显示在浏览器URL栏中)仍然是原始PHP的URL,而不是我正在浏览的目标 以下是我到目前为止得到的信息: <?php $user = "xyz"; $pass = "abc"; $userpass = $user . ":" . $pass; $url = "http://website/directory/"; $ch = curl_init()

有没有办法让PHP重定向到新页面,并传递HTTP-AUTH

我一直在使用cURL,作为第二个示例:

不幸的是,当我这样做时,实际的URL(显示在浏览器URL栏中)仍然是原始PHP的URL,而不是我正在浏览的目标

以下是我到目前为止得到的信息:

<?php

$user = "xyz";
$pass = "abc";
$userpass = $user . ":" . $pass;

$url = "http://website/directory/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $userpass);
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if($httpcode == 200){
    header("Authorization: Basic " . base64_encode($userpass));
    echo $result;
}else{
    header("Location: http://website/login.php");
}

?>
但这失败了;它重定向到,但不传入user/pass,在到达时,服务器会向我提供一个登录名

从技术上讲,以下工作是可行的。但是,与在HREF中传递user/pass相比,我更喜欢更优雅的解决方案:

header("Location: http://" . $userpass . "website/directory/");

尝试将身份验证与url一起传递。像这样:

header('Location: http://username:password@website/directory/');

由于base64像纯文本一样不安全,因此它不应该成为额外的安全风险。浏览器不会在地址栏中显示url中与user:pass相关的部分。但是浏览器会显示一个消息框(或其他内容),让您确认您将要使用用户名登录此站点:yourusername

关于您遇到的问题的解释:
授权
标题仅在HTTP请求中有效。它在HTTP响应中没有任何意义,就像你把它放在哪里一样,因此浏览器会忽略它


您得到的解决方案(在URL中传递用户名和密码)与您将得到的一样好。没有其他选择。

我也想到了这一点。在重定向新页面时,它似乎并没有实际将HTTP-AUTH传递给新页面;到达新位置时,Web服务器仍会提示我输入user/pass。您确定要重定向到的网站正在接受您的凭据吗?我用两个不同的文件夹在localhost上测试了它,它工作了。请看我上面的代码,并将“echo$result;”替换为“header('Location:);”,这就是我尝试过的。它失败了。到达后,我收到了一个登录提示。我是这个网站的新手,发现评论部分的局限性令人沮丧。“网站/目录”前面实际上有一个http。如果与我键入的内容不同,请道歉。使用反勾号转义
http://server.com/script.php
如果要在注释中显示它们。还有一个帮助按钮;)
header('Location: http://username:password@website/directory/');