大家好日子,
我有一个目录设置了一些Apache Auth的东西。这是目录: http://gojalapeno.com/intranet/content/ado-jeune
使用ado-jeune:tezesyrab登录。
以下是为其提供支持的.htaccess的代码:
AuthName "Connexion au dossier:"
AuthType Basic
AuthUserFile "D:\Dropbox\htaccess\secret\.htpasswd"
Require valid-user
现在,该目录的登录表单由浏览器生成,但我希望使用自己的HTML表单。我该怎么做?我尝试过使用cURL和PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://gojalapeno.com/intranet/content/ado-jeune');
curl_setopt($ch, CURLOPT_USERPWD, 'ado-jeune:tezesyrab');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
认证很好,但问题是它没有重定向到页面(尽管有CURLOPT_FOLLOWLOCATION),它只是“包含”在当前文件中。因此,我所有的相关链接都被打破了。
所以我正在寻找的方法是使用我自己的HTML表单对Apache Basic Auth目录进行身份验证,并在之后重定向到该目录。
谢谢!
答案 0 :(得分:2)
不幸的是,由于AuthBasic的工作方式,您所描述的内容很难实现。来自Apache's documentation:
由于指定基本身份验证的方式,每次从服务器请求文档时都必须验证您的用户名和密码。即使您正在重新加载同一页面以及页面上的每个图像(如果它们来自受保护的目录),这也是如此。
浏览器会在用户输入后自动为每个后续请求发送用户凭据。
但是在你的情况下,浏览器本身并没有连接到受保护的目录,而是cURL。一种解决方案是让cURL处理对该受保护目录的所有请求,实质上充当代理。
要实现此目的,您必须编写一个PHP脚本来请求用户的凭据,并在它请求受保护目录中的页面时发送它们。所以像这样:
<?php
// This is *very* basic - you would of course need to make sure the user
// isn't trying to access something in another location
$dest = $_GET["dest"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://gojalapeno.com/intranet/content/' . $dest);
// You would retrieve the user's credentials from an HTML form and save them in session vars
curl_setopt($ch, CURLOPT_USERPWD, $_SESSION["username"] . ":" . $_SESSION["password"]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
?>
希望这有帮助!
答案 1 :(得分:0)
也许您可以定义自己的错误文档,其中包含.htaccess
中的表单:
ErrorDocument 401 /my_custom_password_form.html