使用https连接重定向非www http请求www域

时间:2014-06-08 17:30:05

标签: ubuntu ssl https apache2

我想将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 <www.domain.com>

我在网上尝试了很多提议的解决方案,但它没有用。 我的环境:

  • Ubuntu 14.04
  • Apache2
  • 为&lt;&#34; www.domain.com&#34;&gt;发布的SSL (俗名)

1 个答案:

答案 0 :(得分:1)

更改http(彩池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 <www.domain.com>,因为初始连接将是不正确的证书主机名。因此,使用这两个配置(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&amp;相应调整。