通过HTTPS强制HTTP AUTH



我有一个我想确保的网站目录。我正在使用.htaccess文件来强制http auth进行此操作。我想强迫此http auth通过https完成。

在堆栈溢出上查看各种解决方案是我要说的:

我在" top_secret"目录中有以下.htaccess文件:

SSLRequireSSL
ErrorDocument 403 /rd.php
AuthType Basic
AuthName "Secure Page"
AuthUserFile "/home/usr/.htpasswds/public_html/top_secret/passwd"
Require valid-user

i然后在我的根目录中具有'rd.php':

<?php
$path = "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
if ( $_SERVER['SERVER_PORT'] == 80) {
    header("Status: 302 Movedn");
    header("Location: ".$path."nn");
}
else {
    header( "Content-type: text/htmlnn");
    echo '?';
}
?>

这在我的桌面计算机上很好地工作,但是当我从Safari的iPhone浏览top_secret目录(到HTTPS或HTTP地址(时,我只会返回一个问号。因此,由于某种原因,我的PHP文件的其他条件正在输出。

我不确定这意味着什么以及如何解决,任何帮助将不胜感激

而不是在PHP中这样做,建议您在Web服务器层上实现它。将其添加到.htaccess文件的顶部:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

并删除您的PHP重定向代码。

,但这仍需要在重定向发出之前登录,详细信息将不安全地传输。您真正需要的是Apache中的两个<VirtualHost>块。一个用于重定向请求您目录的端口80,另一个用于HTTP的端口443。

update

在文档中尝试并在文档中发行302重定向是毫无意义因此,它现在无法将响应代码更改为302,因为它已经设置为403。我上面概述的方法将起作用,或者您可以简单地拒绝HTTP请求并仅为该目录服务HTTP。

如果您是beanstalk或任何负载级别的后面,则可以在该级别上设置重定向。否则写入.htaccess配置由@superduperapps建议。这应该是评论,但我没有足够的代表; - (

最新更新