gpt4 book ai didi

apache - 强制通过 HTTPS 进行 HTTP 身份验证

转载 作者:行者123 更新时间:2023-12-02 09:55:35 24 4
gpt4 key购买 nike

我有一个我想要保护的网站目录。我使用 .htaccess 文件来强制进行 HTTP 身份验证。我想强制通过 HTTPS 完成此 HTTP 身份验证。

在这里查看有关堆栈溢出的各种解决方案是我必须要做的:

我在“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 条件正在输出。

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

最佳答案

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

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

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

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

更新

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

关于apache - 强制通过 HTTPS 进行 HTTP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com