我在运行 Apache 2 的 Amazon EC2 实例上有一个 Ubuntu 18.04 服务器,安装了 SSL 证书,我专门用它来托管 .tld 变体的虚拟主机policymakr.com域,共享同一个固定IP。
我希望配置能够实现以下目标:
- 主域(policymakr.domains,具有 index.html 页面,可通过 SSL 在服务器上访问)可在服务器上访问;
- 将所有其他顶级域名通过 301 重定向到https://www.policymakr.com由托管的 WordPress 主机单独托管;
- 将所有 http 入站 policymakr.domains 流量重定向到 https,并将所有 policymakr.domains 流量重定向到 www.policymakr.domains。
(我这样做的原因是因为我想通过 301 重新映射 tlds 以用于 SEO 目的,而我的 WordPress 网站的主机无法实现这一点,因为该网站托管在共享服务器上。)
我开始设置 tlds,它们重定向得很好。tlds(.net、.org、.info 和 .io)的 .conf 文件都是相同的,如下所示:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.policymakr.[tld]
DocumentRoot /var/www/html/policymakr.[tld]/
ErrorLog /var/www/logs/error.log
Redirect 301 / https://www.policymakr.com/
</VirtualHost>
在我设置 tld 虚拟主机之后,301 重定向全部开始完美运行。
我一直为 policymakr.domains 设置虚拟主机,因为需要安装外部 SSL 证书(Amazon 证书似乎无法附加到 EC2 实例)会增加一点复杂性。
我设置的policymakr.domains虚拟主机如下:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.policymakr.domains
ServerAlias policymakr.domains
DocumentRoot /var/www/html/policymakr.domains/
ErrorLog /var/www/logs/error.log
RewriteEngine on
RewriteCond %{HTTP_HOST} ^policymakr\.domains
RewriteRule ^(.*)$ http://www.policymakr.domains/$1 [R=permanent,L]
</VirtualHost>
<VirtualHost *:443>
ServerName www.policymakr.domains
ServerAlias policymakr.domains
DocumentRoot /var/www/html/policymakr.domains/
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/[crt file name]
SSLCertificateKeyFile /etc/apache2/ssl/private/[private key]
SSLCertificateChainFile /etc/apache2/ssl/[bundle file]
RewriteEngine on
RewriteCond %{HTTPS_HOST} ^policymakr\.domains
RewriteRule ^(.*)$ https://www.policymakr.domains/$1 [R=permanent,L]
</VirtualHost>
此后,policymakr.domains 的重定向完全按照我的要求运行(即,非 www 到 www,http 到 https),但其他顶级域名的 301 重定向已停止工作。相反,它们现在全部重定向到https://www.policymakr.domains。
我基本上不知道我在这里做错了什么。
答案1
整个配置实际上在几个小时后就成功了,这可能是某种缓存问题。我唯一添加的更改是ServerAlias policymakr.[tld]
每个.conf
文件中的一个条目。