apache在https中从无www重定向到www域

问题描述

编辑: Redirect permanent "/" "https://%{HTTP_HOST}/"实际上在第一次重定向中不起作用。它似乎起作用是因为我的CDN会自动将http重定向到https :,而不是因为我的设置。抱歉造成混乱。


我正在尝试编写Apache httpd配置文件以将所有http流量重定向到https,并且还需要将任何www域都重定向到www。

例如
http://example.com http://www.example.com https://example.com
应该全部重定向
https://www.example.com

这是我所做的:

<VirtualHost ipaddress:80>  
  ServerName example.com  
  ServerAlias www.example.com  

  Redirect permanent "/" "https://%{HTTP_HOST}/"
</VirtualHost>

这部分有效。所有http都重定向到https。请注意,%{HTTP_HOST}已解决并替换。 现在,我无需将任何www重定向到www

<VirtualHost ipaddress:443>
  SSLEngine on
  ServerName www.example.com
  ServerAlias example.com

  <If "%{HTTP_HOST} !~ /www/">
     Redirect permanent "/" "https://www.%{HTTP_HOST}/"
  </If>

  ...
</VirtualHost>

当我访问https://example.com时,它会重定向,但是这次重定向https://www.%{HTTP_HOST}/而不是https://www.example.com/

现在,如果我使用
Redirect permanent "/" "https://www.example.com/"
那么https://example.com将被重定向https://www.example.com

因此,似乎在第二个VirtualHost块中未替换%{HTTP_HOST}。

如何使其正确?

解决方法

您可以尝试使用重写规则

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^https://example.com [NC]
 RewriteRule ^(.*)$ https://www.example.com/$1