通过HTTPS强制HTTP AUTH

时间:2017-04-27 00:52:40

标签: apache .htaccess mod-rewrite url-rewriting http-authentication

我想要保护我的网站目录。我这样做是使用.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

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

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

这在我的桌面计算机上工作得很好,但是当我从safari中的iphone浏览top_secret目录(到HTTPS或HTTP地址)时,我只是得到一个问号返回。所以由于某种原因我的php文件的else条件正在输出。

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

2 个答案:

答案 0 :(得分:3)

我建议您在Web服务器层实现它,而不是在PHP中执行此操作。将其添加到.htaccess文件的顶部:

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

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

但是在发布重定向之前,这仍然需要登录,并且不安全地传输详细信息。你真正需要的是Apache中的两个<VirtualHost>块。一个用于端口80,用于将目录请求重定向到HTTPS,另一个用于端口443,其中配置了HTTP AUTH。

<强>更新

尝试在用作403错误文档的文档中发出302重定向是没有意义的,因为状态代码已经设置并且文档仅用于生成该响应的主体,因此它现在无法将响应代码更改为302,因为它已经设置为403.我上面概述的方法将起作用,或者您可以简单地拒绝HTTP请求并仅为该目录提供HTTPS。

答案 1 :(得分:1)

如果您在beanstalk或任何负载均衡器后面,那么您可以在该级别设置重定向。否则请编写@SuperDuperApps建议的.htaccess配置。这应该是一个评论,但我没有足够的代表; - )