在 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 证书?