我正在尝试通过基本授权强制特定目录仅要求允许的 IP 和有效的用户名/密码。为了确保用户名/密码以加密形式发送,我希望目录也强制使用 SSL。以下是我的 .htaccess 文件中的内容:
# Force HTTPS-Connection
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://www.mywebsite.com%{REQUEST_URI} [R,L]
## password begin ##
AuthName "Restricted Access"
AuthUserFile /var/www/admin/.htpasswd
AuthType Basic
Require valid-user
Order deny,allow
Deny from all
Allow from 79.1.231.151 62.123.134.83
Satisfy All
不幸的是,当我使用 http 协议访问该目录时,它会在将页面重定向到安全版本之前要求输入密码。这意味着密码是未加密发送的。我做错了什么?有办法吗?
答案1
尝试放入SSLRequireSSL在您的.htaccess 文件或全局 Apache httpd 配置中。
答案2
重写和重定向在授权后处理。但是:首先处理 httpd.conf 中的别名。
那么我该怎么做才能让我的 http://servername/webmailhttps://webmail.服务器名称将它放入 httpd.conf 中,如下所示:
<IfModule alias_module>
Redirect permanent /webmail https://webmail.servername
</IfModule>
基本授权可以保留在您的 .htaccess 中,并且在重定向执行后只会执行一次...
答案3
如果您有权访问 Apache 配置,请将身份验证节添加到VirtualHost
已启用 SSL 的配置中。然后重定向将始终首先发生。
此外,使用mod_rewrite
执行简单的重定向有点过头了。使用重定向指令。这甚至可能会解决您的问题,因为我相信mod_rewrite
规则是最后要处理的指令之一,就在文件真正从文件系统中抓取之前。