Назад | Перейти на главную страницу

Виртуальные хосты на Apache не применяют 301 редирект

У меня есть сервер Ubuntu 18.04 на экземпляре Amazon EC2 под управлением Apache 2 с установленным сертификатом SSL, который я использую исключительно для размещения виртуальных хостов для вариантов .tld. policymakr.com домен, использующий тот же фиксированный IP.

Я хочу, чтобы конфигурация достигла следующего:

  1. основной домен (policymakr.domains, имеющий страницу index.html и предназначенный для доступа на сервере через SSL) должен быть доступен на сервере;
  2. все остальные TLD для перенаправления через перенаправление 301 на https://www.policymakr.com который размещается отдельно на управляемом хосте WordPress;
  3. перенаправить весь входящий трафик http policymakr.domains на https, а весь трафик policymakr.domains на www.policymakr.domains.

(Причина, по которой я это делаю, заключается в том, что я хочу переназначить tld через 301 для целей SEO, и это не может быть достигнуто хостом моего сайта WordPress, потому что сайт размещен на общем сервере.)

Я начал настраивать tld, и они нормально перенаправили. Файлы .conf для tld (.net, .org, .info и .io) идентичны и выглядят следующим образом:

<VirtualHost *:80>
   ServerAdmin webmaster@policymakr.com
   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 webmaster@policymakr.com
   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 для других tld перестала работать. Вместо этого все они теперь перенаправляются на https://www.policymakr.domains.

Я в принципе не знаю, что я здесь не так.

Через несколько часов вся конфигурация фактически заработала, возможно, это была какая-то проблема с кешированием. Единственное изменение, которое я добавил, было ServerAlias policymakr.[tld] запись в каждый .conf файл.