.htaccess 将 https 重定向到 http 不起作用

Ira*_*ney 4 apache .htaccess ssl redirect

我正在尝试将任何 https 流量捕获到我网站的前面,因此:

https://www.domain.com
Run Code Online (Sandbox Code Playgroud)

被重定向到:

http://www.domain.com
Run Code Online (Sandbox Code Playgroud)

但是,其他子域需要重定向到其他地方。在大多数情况下,除了 https -> http 重定向之外,这一切都有效。这是我目前的 .htaccess 文件:

RewriteEngine On

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" ^([^\.]+).*$
RewriteRule ^(.*)$ https://secure.domain.com/a/login/%1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

似乎这一点:

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

不像我想象的那样工作。事实上,它似乎根本没有重定向。

在另一个子目录中,我的效果正好相反:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

所以我的想法是相反应该做的工作,但似乎没有。

有人有什么想法吗?

编辑

我认为这可能与以下事实有关:在服务器上有一个 ssl 证书,ISP 使用该证书为您的站点提供通用 https 地址。例如,如果您的网站位于:

http://www.yourdomain.com

您可以使用以下方法通过 https 访问相同的内容/托管帐户:

https://server100.securedomain.com/yourdomain.com

可能是因为当我在浏览器中输入 https 时,我正在获得通用证书,并且因为它与我输入的域名不匹配,所以我收到了一个关于不受信任的证书的安全警告,该证书正在停止重定向?

编辑 2

查看服务器标头,我认为我的上述假设是正确的。服务器返回:

The host name in the certificate is invalid or does not match
Run Code Online (Sandbox Code Playgroud)

这会停止重定向吗?

Ira*_*ney 5

刚刚意识到我从来没有关闭它,所以为了其他试图解决这个问题的人的利益,我现在会。

简而言之,我试图实现的所有 https -> http 重定向将不起作用,因为服务器首先提供证书,然后生成安全警告。出于明显的安全原因,这发生在重定向之前,因此重定向无法正常工作。

希望能帮助别人。