【问题标题】:Redirect non-www http request www domain with https connection使用 https 连接重定向非 www http 请求 www 域
【发布时间】:2014-07-29 07:37:41
【问题描述】:

我想将http://domain.com 重定向到https://www.domain.com。我成功地将http 重定向到https 像这样(在default-ssl.conf 文件中):

<VirtualHost domain.com:80>
  RewriteEngine on 
  ReWriteCond %{SERVER_PORT} !^443$ 
  RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

<VirtualHost _default_:443>
  RewriteEngine on 
  ServerAdmin webmaster@localhost 
  ServerName domain.com:443 
  ServerAlias www.domain.com 
  DocumentRoot /var/www/html
</VirtualHost>

但是当我输入没有www 的域时,我收到错误消息This site is untrusted, the certificate is only valid to &lt;www.domain.com&gt;

我在网上尝试了许多建议的解决方案,但都没有奏效。 我的环境:

  • Ubuntu 14.04
  • Apache2
  • 为 (通用名称)
  • 颁发 SSL

【问题讨论】:

  • 我不知道为什么我投了反对票,但还是谢谢 :)
  • 我没有投反对票,但我想这是投反对票的原因,因为您可能对现有答案不够努力。如果您在此站点(页面右上角)搜索“www 非 www 证书重定向”(甚至 Google),您会发现许多非常相似的问题(如果不是完全重复的话),特别是 this one, as the first result,其中,虽然严格来说不是完全重复,但有一个答案可以准确地告诉您为什么会收到此证书错误消息。
  • 这很好,伙计:) 但相信我,我在过去 3 天搜索了一个答案,我在这里找到的答案是唯一有效的。将来可能会帮助其他人,谁知道呢!

标签: ubuntu ssl https apache2


【解决方案1】:

更改http (pot 80) 配置:

<VirtualHost domain.com:80>
  RewriteEngine on 
  ReWriteCond %{SERVER_PORT} !^443$ 
  RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

对此,它将对httpswww 进行联合检查:

<VirtualHost domain.com:80>
  RewriteEngine on 
  RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
  RewriteRule ^ https://%2%{REQUEST_URI} [R=301,L]
</VirtualHost>

也就是说,您仍然可能会收到 This site is untrusted, the certificate is only valid to &lt;www.domain.com&gt;,因为初始连接将指向不正确的证书主机名。因此,最好对这两个配置(httphttps)进行调整,如下所示:

<VirtualHost domain.com:80>
  RewriteEngine on 
  ReWriteCond %{SERVER_PORT} !^443$ 
  RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

<VirtualHost _default_:443>
  ServerAdmin webmaster@localhost 
  ServerName domain.com:443 
  ServerAlias www.domain.com 
  DocumentRoot /var/www/html
  RewriteEngine on 
  RewriteCond %{HTTP_HOST} !^(www\.)?(.+)
  RewriteRule ^ https://%2%{REQUEST_URI} [R=301,L]
</VirtualHost>

这个想法是在http 连接上,您只需重定向到https。然后在https 连接上,检查www 是否已设置并进行相应调整。

【讨论】:

  • 感谢朋友的回复。不幸的是,它没有用。现在它将 www 重定向到非 www,即使我把 重定向到 (domain.com)。也许如果你反转规则它会起作用(对不起,我不知道如何反转条件规则,我不习惯这种类型的编码 XD)谢谢
  • 现在可以了!我刚刚添加了“!”之前^www...非常感谢我的朋友!剩下的只有一件事是:当我键入 https:// domain .com 没有“www”=时,它会给出不受信任的链接警告。这种情况有什么解决方案吗?谢谢
  • @Engineeroholic “当我输入 时;它给出了不受信任的链接警告。这种情况有什么解决办法吗?”我不这么认为,因为与https://domain.com 建立的任何连接都会加载与https://www.domain.com 不匹配的证书。即使只有几分之一秒,也需要建立连接,以便显示警告。当我说:“也就是说,你仍然可能得到……”时,我在回答中提到了这一点。
  • 有道理,感谢您的解释。也许我将来会购买支持 www 和非 www 的不同证书。
猜你喜欢
  • 2015-04-20
  • 2015-02-25
  • 2015-04-06
  • 1970-01-01
  • 2018-09-26
  • 2016-10-15
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多