.htaccess将https重定向到http无效

时间:2010-06-05 12:29:36

标签: apache .htaccess ssl redirect

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

https://www.domain.com

被重定向到:

http://www.domain.com

但是,其他子域名需要重定向到其他位置。除了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]

这似乎有点:

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

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

在另一个子目录中,我有相反的效果,它可以正常工作:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

所以我的想法应该完成这项工作,但似乎没有。

有人想过吗?

修改

我认为这可能与服务器上有一个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

这会停止重定向吗?

3 个答案:

答案 0 :(得分:4)

刚才意识到我从未关闭此功能,所以为了其他任何试图解决此问题的人的利益,我现在就会这样做。

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

希望能帮到别人。

答案 1 :(得分:0)

如果“它似乎根本没有重定向”,我猜是

RewriteCond %{HTTPS} on

由于某种原因失败了。我在一个例子中看到了这一点:

RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on

也许你需要两者?

答案 2 :(得分:0)

我知道这是一个旧帖子,但我刚刚找到答案,它可能会帮助将来的某个人:

确保ssl服务器的虚拟主机文件具有:

AllowOverride All

这可能出现在您的默认服务器虚拟主机文件中,这就是您可以从http

进行的操作