我正在尝试捕获任何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地址。例如,如果您有一个站点:
您可以使用以下方式通过https访问相同的内容/托管帐户:
https://server100.securedomain.com/yourdomain.com
可能是因为当我在浏览器中键入https时,我正在提供通用证书,因为它与我输入的域名不匹配,我收到了关于不受信任的证书的安全警告正在停止重定向?
编辑2
查看服务器标题我认为我对上述假设是正确的。服务器正在返回:
The host name in the certificate is invalid or does not match
这会停止重定向吗?
答案 0 :(得分:4)
刚才意识到我从未关闭此功能,所以为了其他任何试图解决此问题的人的利益,我现在就会这样做。
简而言之,抓住所有https - >我试图实现的http重定向不起作用,因为服务器首先提供证书然后生成安全警告。出于明显的安全原因,这在重定向之前发生,因此重定向不能正常工作。
希望能帮到别人。
答案 1 :(得分:0)
如果“它似乎根本没有重定向”,我猜是
RewriteCond %{HTTPS} on
由于某种原因失败了。我在一个例子中看到了这一点:
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
也许你需要两者?
答案 2 :(得分:0)
我知道这是一个旧帖子,但我刚刚找到答案,它可能会帮助将来的某个人:
确保ssl服务器的虚拟主机文件具有:
AllowOverride All
这可能出现在您的默认服务器虚拟主机文件中,这就是您可以从http
进行的操作