目前,我正在运行基于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>

09-11 04:47
查看更多