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

Sup*_*eer 16 apache subdomain redirect wildcard-subdomain

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

<VirtualHost *:80>
  ServerName subdomain.example.com
  Redirect 302 / https://subdomain.example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

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

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

更新

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

arc*_*444 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>
Run Code Online (Sandbox Code Playgroud)

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

  • @ drabo2005 - 什么?这是端口80上的VirtualHost - 即它只提供HTTP - 此主机上不需要证书... (3认同)
  • 您的行:`RewriteCond %{HTTP_HOST} ^(.+)\.subdomain\.com$` 应该是 `RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$`。 (2认同)

Tim*_*myG 19

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

<VirtualHost *:80>
    #...whatever you already have set up...

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

  • 更简单更完美! (3认同)

Mis*_*cha 11

正如RewriteHTTPToHTTPS的 Apache Wiki 条目所述,

使用 mod_rewrite 执行此操作不是推荐的行为。请参阅重定向SSL

强制 HTTP 到 HTTPS 重定向的虚拟主机配置 - 也适用于子域 - 是这样的:

<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>
Run Code Online (Sandbox Code Playgroud)

说明: Redirect 和 RedirectMatch 通常没有{HTTP_HOST}来自 Mod_Rewrite的变量(如),但如果您使用<Location >这些变量,则会分配这些变量。

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

301 重定向被认为是将用户从 HTTP 升级到 HTTPS的最佳实践

注意:此配置基于子域的通配符证书