gpt4 book ai didi

.htaccess - 如何在目录上强制使用 HTTPS 并强制使用 HTTPS 身份验证

转载 作者:行者123 更新时间:2023-12-04 16:56:11 27 4
gpt4 key购买 nike

我想知道强制 HTTPS 身份验证的最佳方法是什么。

当我的 .htaccess 文件中有这个时:

AuthType Basic
AuthName "Developer"
AuthUserFile /usr/local/etc/apache22/passwords/passwords
Require user david

身份验证有效,但它通过端口 80 进行身份验证,以明文形式发送密码。

所以我想我会添加一个重定向规则来将所有非 HTTPS 请求重定向到等效的 HTTPS 请求:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteBase /~david/
RewriteRule ^(.*)$ https://myserver.tld/~david/$1 [R,L]

这也有效,但它首先在端口 80 上进行身份验证,然后重定向,然后在端口 443 上再次进行身份验证。我不想在端口 80 上进行身份验证,因为密码将以明文形式发送。我一直无法找到立即重定向到 HTTPS 然后进行身份验证的好方法。

我能弄清楚如何做到这一点的唯一方法是这样做:
AuthType Basic
AuthName "Developer"
AuthUserFile /usr/local/etc/apache22/passwords/passwords
Require user david
ErrorDocument 403 /403.php
SSLRequireSSL

并且在我的服务器的/上有一个 403.php PHP 脚本:
<?php

header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);

?>

这是所需的行为。它需要 SSL,因此当您尝试访问端口 80 上的目录时,它会吐出一个自定义错误文档,该文档会将页面重定向到 HTTPS。

这似乎是一团糟。有没有更好的方法来实现这一点?

最佳答案

因此,您遇到的问题是您的 or 块现在同时适用于 HTTPS 和 HTTP 情况。你需要解开这个(实际上 - 你也可以使用'satisfy any' - 但在这种情况下有点困惑)。

一种易于调试/理解的方法是转到如下结构:

<VirtualHost *:80>
...
RewriteRule ^/foo/bar/?(.*)$ https://myserver.tld/foo/bar/$1 [R,L]
# and to guard against typo's...
<Directory /foo/bar/>
deny from all
</Directory>
</VirtualHost>


<VirtualHost *:443>
...
<Directory /foo/bar/>
BasicAuth .. etc.
allow from all
</Directory>
</VirtualHost>

并从那里拿东西。

体重。

关于.htaccess - 如何在目录上强制使用 HTTPS 并强制使用 HTTPS 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514253/

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