将所有子域名从http重定向到https

时间:2014-04-14 11:55:57

标签: apache redirect subdomain wildcard-subdomain

我使用以下代码将我的子域的所有http请求重定向到https。

<VirtualHost *:80>
  ServerName subdomain.example.com
  Redirect 302 / https://subdomain.example.com
</VirtualHost>

现在我的问题是如何为所有子域做到这一点。

例如,http:subdomain1.example.com应转到https:subdomain1.example.com,http:subdomain2.example.com应转到https:subdomain2.example.com

如何为所有子域执行此操作,而无需为所有子域创建一个虚拟主机

更新

我发现RedirectMatch采用正则表达式。有谁知道如何使用正则表达式?

3 个答案:

答案 0 :(得分:20)

您可以将其添加到服务器的.conf文件中:

<VirtualHost *:80>
  ServerName subdomain.example.com
  ServerAlias *.example.com

  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$
  RewriteRule ^(.*)$ https://%1.example.com$1 [R=302,L]
</VirtualHost>

ServerAlias将允许vhost充当通配符,然后您可以从主机头中提取子域并将其包含在重写为https

答案 1 :(得分:2)

这是对.conf文件的更简单的通用修改:

{{1}}

答案 2 :(得分:0)

作为RewriteHTTPToHTTPS状态的Apache Wiki条目,

  

建议不要使用mod_rewrite来执行此操作。参见RedirectSSL

用于强制HTTP到HTTPS重定向的vhost配置-也可与子域一起使用-

<VirtualHost *:80>
    ServerName example.com
    ServerAlias *.example.com

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

<VirtualHost *:443>
    [...your vHost configuration...]
    SSLEngine On
    SSLCertificateFile /path/to/your/cert.pem
    SSLCertificateKeyFile /path/to/your/privkey.pem
</VirtualHost>

说明:Redirect和RedirectMatch通常没有Mod_Rewrite中的变量(如{HTTP_HOST}),但是如果使用<Location >,这些变量将被分配。

Redirect permanent(或者:Redirect 301)将使用http 301代码重定向,因为

  

301重定向被认为是best practice,用于将用户从HTTP升级到HTTPS。

注意:此配置基于Wildcard Certificates的子域。