目录保护在我的 https 网站上两次要求输入密码?

Posted

技术标签:

【中文标题】目录保护在我的 https 网站上两次要求输入密码?【英文标题】:Directory protection asking for password twice on my https website? 【发布时间】:2014-01-27 20:07:50 【问题描述】:

我正在尝试使用目录保护代码来保护我的网站。该网站使用 php

我的网站有 https,就像https://www.example.com。

当我打开网站时,它要求输入用户名和密码两次。我认为它需要一次用于 http,一次用于 https。

谁能帮我解决这个问题。

下面是我的.htaccess file code

选项-多视图 重写引擎开启 RewriteBase / RewriteCond %HTTP_HOST ^example.com$ [NC,OR] RewriteCond %HTTP_HOST ^www.example.com$ [NC] 重写规则 ^(.*)$ https://www.example.com/$1 [R=301,L] AuthType 基本 身份验证名称“example.com” AuthUserFile /www.example.com/web/content/.htpasswd 需要有效用户 # 关闭 mod_security 过滤。 SecFilterEngine 关闭 # 下面的可能不需要, # 但安全总比抱歉好。 SecFilterScanPOST 关闭

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

您将获得两次身份验证对话,因为 Apache 在 mod_rewrite 指令之前运行 mod_auth 指令。此外,在 HTTP URL 中设置的 authentication 会话在 HTTPS URL 中不再有效,因此 Apache 也必须遵循 HTTPS 下的 BASIC auth 指令。

可以有一些work-around 类型的解决方案来跳过对 http URL 的基本身份验证,并且只对 HTTPS 执行此操作,但这并不简单。

更新:这是一个解决方案,您可以使用它来避免显示 BASIC auth 对话两次。

RewriteEngine On 
RewriteBase /

# redirect to HTTPS and set a cookie NO_AUTH=1
RewriteCond %HTTPS off
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [R=301,L,CO=NO_AUTH:1:%HTTP_HOST]

# If cookie name NO_AUTH is set then set env variable SHOW_AUTH
SetEnvIfNoCase COOKIE NO_AUTH=1 SHOW_AUTH

# show Basic auth dialogue only when SHOW_AUTH is set
AuthType Basic
AuthName "example.com"
AuthUserFile /www.example.com/web/content/.htpasswd
Require valid-user
Order allow,deny
allow from all
deny from env=SHOW_AUTH
Satisfy any

由于 cookie 只为 http://domain.com 设置,因此 env 变量也只设置一次,BASIC auth 对话框也只显示一次

【讨论】:

你能告诉我有什么办法吗? 这不是一个直接的方法。我会提供答案。 我可以知道你的 Apache 版本吗?

以上是关于目录保护在我的 https 网站上两次要求输入密码?的主要内容,如果未能解决你的问题,请参考以下文章

密码保护我的网站

如何在opencart的同一页面上两次使用相同脚本中的脚本?

为啥浏览器不要求记住密码? [复制]

我可以使用密码保护GIT存储库吗?

godaddy nginx https 配置

python设计函数,实现会员注册,要求用户名长度不小于3,密码长度不小于6, 注册时两次输入密码必须相同