在 Apache 上通过 HTTPS 将服务器别名重定向到服务器名称

Posted

技术标签:

【中文标题】在 Apache 上通过 HTTPS 将服务器别名重定向到服务器名称【英文标题】:Redirect Server Aliases to Server Name Over HTTPS on Apache 【发布时间】:2021-04-14 18:52:17 【问题描述】:

一段时间以来,我一直在四处寻找问题的答案,并阅读了其他各种答案,但没有找到适合我的答案。

我要解决的问题涉及重定向对安装在 Apache 服务器上的 WordPress 站点的访问。 WordPress 站点是作为 WordPress 网络安装的一部分安装的众多站点之一,该站点设置在域 https://www.mysite1.co.uk 上。

还需要使用一些服务器别名来访问该站点,这些别名将被重定向到根域。我在 Apache 配置中创建了额外的域作为服务器别名,并设置了重定向以确保如果输入了其中一个别名,那么它应该被重定向到根域。

<VirtualHost *:80>
    ServerName www.mysite1.co.uk
    ServerAlias mysite1.co.uk www.mysite2.co.uk mysite2.co.uk
    ...

    RewriteEngine On
    RewriteCond %HTTPS off [OR]
    RewriteCond %HTTP_HOST !^www\.
    RewriteCond %HTTP_HOST ^(?:www\.)?(.+)\.?$ [NC]
    RewriteRule ^ https://www.mysite1.co.uk%REQUEST_URI [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName www.mysite1.co.uk
    ServerAlias mysite1.co.uk www.mysite2.co.uk mysite2.co.uk
    ...

    RewriteEngine On
    RewriteCond %HTTPS off [OR]
    RewriteCond %HTTP_HOST !^www\.
    RewriteCond %HTTP_HOST ^(?:www\.)?(.+)\.?$ [NC]
    RewriteRule ^ https://www.mysite1.co.uk%REQUEST_URI [R=301,L]

    SSLEngine On
    SSLCertificateFile "certs/mysite1.co.uk.crt"
    SSLCertificateKeyFile "certs/mysite1.co.uk.key"
</VirtualHost>

只要用户使用 http 输入其中一个别名,此配置就会起作用,它们会被重定向到 https://www.mysite1.co.uk/。但是,如果他们使用 https 输入别名,而不是被重定向到 https://www.mysite1.co.uk/,他们根本不会被重定向。

我是否遗漏了配置中的某些内容,或者我是否需要分离 https 配置并将别名添加到它们自己的虚拟主机中以进行重定向。 这些站点托管在 CentOS 7.9.2009 上并运行 Apache 2.4.6。

【问题讨论】:

【参考方案1】:

如果我理解正确,您会尝试将到达您的 apache 的每个已知域重定向到一个域,并且当连接以 HTTP 形式出现时,您希望将其重定向到 HTTPS。

为了保持配置简单,我会创建 3 个不同的虚拟主机:

第一个将侦听 http 并包含您要重定向的每个域(包括主要的域,因为它正在侦听 http)。此虚拟主机将通过 https 将所有内容重定向到主域:

<VirtualHost *:80>
   ServerName main.site.com
   ServerAlias mysite.example.com
   ServerAlias another.site.com
   Redirect permanent / https://main.site.com/
</VirtualHost>

第二个将侦听 https 端口并包括除主域之外的所有域并将其重定向到您的主域(与前一个类似,但不包括主域)

<VirtualHost *:443>
   ServerName mysite.example.com
   ServerAlias another.site.com
   Redirect permanent / https://main.site.com/
   
   ...
   SSLEngine On
   ...
</VirtualHost>

最后,main 只会监听 https 并且只包含主域:

<VirtualHost *:443>
   ServerName main.site.com
   
   ...
   SSLEngine On
   ...
</VirtualHost>

这样,唯一需要配置(文档根目录、位置等)的虚拟主机是最后一个。

【讨论】:

以上是关于在 Apache 上通过 HTTPS 将服务器别名重定向到服务器名称的主要内容,如果未能解决你的问题,请参考以下文章

在视图上生成 URL 时,Laravel 命名路由方法不会生成主机服务器的 (apache) 别名

重定向指令是不是覆盖配置的别名

sh 通过https在apache服务器上配置socket.io

如何使用别名在 Apache 虚拟主机上配置多个 SSL 证书?

从 Apache 配置中删除 /var/www/icons 别名 [关闭]

无法从 MAC 在 VirtualBox 上的 Centos7 上通过 HTTPS 连接到 Apache 服务器