目前,我正在运行基于SSL和非SSL(混合协议)的网站。仅对登录用户或其中包含表单的页面启用SSL。
为了强制使用SSL(HTTPS),我在需要启用SSL的目录中使用以下代码:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
哪个工作正常!因此,这没有问题。
但是,如上所述,我的网站上的目录之一是带有强制SSL代码段的密码保护,其中包含以下用于目录锁定的代码:
AuthType Basic
AuthName '\Enter Username and Password'
AuthUserFile /ibm_server/govt_india/public_html/docs/.htpasswd
require valid-user
现在,当我尝试访问受密码保护的目录时,它要求输入用户名和密码两次。可能是因为我正在使用基于非SSL的域来访问目录,即http://example.com/docs
它将重定向到基于SSL的域https://example.com/docs,并再次为其请求用户名和密码。
首先重定向到SSL站点,然后让用户输入用户名和密码的最佳方法是什么?
最佳答案
不能100%确定,但是我认为您无法在.htaccess中执行此操作,因为同一资源不能同时可用和不可用。
使用重写条件,您可以掩盖服务器中的最终资源,但是同样,它必须是公共的并且可以访问。
使用您的apache httpd.conf文件,您可以使用端口(80和443)声明2个不同的虚拟主机。
这是我的httpd.conf
<VirtualHost *:80>
ServerName algodiscreto.com
DocumentRoot "/var/www/algodiscreto-com/"
<Directory />
AllowOverride All
Options FollowSymLinks
Order deny, allow
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName m.algodiscreto.com
DocumentRoot "/var/www/algodiscreto-com/"
<Directory />
AllowOverride All
Options FollowSymLinks
Order deny, allow
Allow from all
</Directory>
</VirtualHost>