Как 301 перенаправить старый домен на новый домен на том же хосте с помощью SSL и избежать ошибки конфиденциальности


Вот окружающая среда:

  • Apache, mod_rewrite.c существует
  • WordPress
  • Два домена, которые указывают на один и тот же веб-узел, мы будем называть их
    • www.olddomain.com
    • www.newdomain.com

У нас есть SSL-сертификат для www.newdomain.com, но не www.olddomain.com , в соответствии с правилами о необходимости двух отдельных IP-адресов для отдельных SSL-сертификатов.

Мой текущий файл .htaccess отлично работает, ЗА исключением случаев, когда вы введите **https**://www.olddomain.com

Затем браузер выдает ошибку конфиденциальности "Ваше соединение не является закрытым" на странице типа.

Вот как выглядит .htaccess:

Пожалуйста, обратите внимание, что раздел WordPress и раздел ссылок на спам, вероятно, не имеют к этому никакого отношения, но я включаю их на случай, если они вызывают проблемы:

Options +FollowSymLinks -MultiViews
RewriteEngine on
#
# if requested hostname is non-blank
RewriteCond %{HTTP_HOST} .
# and if requested hostname is NOT "newdomain.com"
RewriteCond %{HTTP_HOST} !^www\.newdomain\.com
# redirect to same object in correct domain
RewriteRule (.*) https://www.newdomain.com/$1 [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

##Block Spam Referrer
SetEnvIfNoCase Referer blackhatworth.com spam=yes
SetEnvIfNoCase Referer priceg.com spam=yes
Order Allow,Deny
Allow from all
Deny from env=spam
Author: Will Lanni, 2015-04-05

3 answers

Хотя невозможно разместить несколько защищенных сайтов на одном IP-адресе, благодаря SNI и SAN, перенаправление, которое вы пытаетесь сделать , невозможно без одного из вышеупомянутых решений. Для того, чтобы получить перенаправление от https://www.olddomain.com , браузер, должно быть, уже запросил этот URL-адрес с использованием SSL/TLS и ожидает зашифрованного ответа от веб-сервера с действительным сертификатом для этого домена - даже если этот ответ это всего лишь 301.

 4
Author: dartonw, 2015-04-05 03:08:20

Это легко сделать, и единственная недостающая часть головоломки - сертификат SSL для olddomain.com. Забудьте о том, что IP-адреса ограничивают вас, это недоразумение является основной причиной вашей проблемы.

Сертификаты "Подтвержденный домен" (или DV) очень недороги и доступны у нескольких поставщиков по цене значительно ниже 10 долларов США. Я использовал cheapsslsecurity.com и gogetssl.com , но есть много других, и продукт идентичен, так что покупайте его где угодно. Захватить сертификат DV для olddomain.com, используемый для перенаправления.

Причина, по которой браузеры возвращают ошибку, заключается в том, что протокол SSL представляет собой отдельный уровень, который инкапсулирует протокол HTTP, и сеанс SSL происходит до того, как может начаться сеанс HTTP. Это предотвращает ваше перенаправление HTTP - мы еще не достигли этого уровня.

Проще говоря, вам нужно предоставить действительный сертификат для подтверждения SSL, затем произойдет перенаправление. Код перенаправления вводится ваша конфигурация Apache (либо блок виртуального хоста, либо .htaccess) вместе с путями сертификатов, такими как:

<VirtualHost 127.0.0.1:443>

  # Declare this rule only for the old domain
  ServerName OLDDOMAIN.com

  # Certificates presented so we can move on to the next step
  SSLEngine on
  SSLCertificateFile      /PATH/TO/CERT.crt
  SSLCertificateChainFile /PATH/TO/CHAIN-FILE.pem
  SSLCertificateKeyFile   /PATH/TO/KEY.key

  # Use a redirect, it is far more efficient than using rewrite
  Redirect 301 / https://www.NEWDOMAIN.com/

</VirtualHost>

Удачи и имейте в виду, что некоторые хосты используют эту идею о том, что SSL/TLS является каким-то сложным или дорогим, и взимают за это грабительские цены или предъявляют ненужные требования, например, заставляют вас доплачивать за выделенный IP-адрес. Если ваш хост сказал вам об этом, просто откажитесь от них и переместите свои сайты в другое место.

 0
Author: Tom Brossman, 2015-04-06 08:37:01

Я хотел бы отметить пару вещей.

  1. Это вполне возможно. Я уже все настроил прямо сейчас. Частично проблема заключается в том, что вы переписываете URL-адреса, а не перенаправляете их. Перезапись просто изменяет, какой домен в браузере или какой файл на самом деле вызывается, но на самом деле это не меняет ваш домен. Для этого вы должны использовать перенаправление.

  2. Начиная с Apache 2.4 (выпущен в 2012!), вы можете использовать условные обозначения для выполнения перенаправление. Вот пример.

<If "req('Host') != 'newdomain.com'">
    RedirectMatch 301 (.*) https://newdomain.com$1
</If>

Это хорошо, потому что он также сохраняет тот же путь ($1) через перенаправление.

Единственная загвоздка, как упоминалось в предыдущем ответе, заключается в том, что у вас должен быть действительный SSL-сертификат для старого домена, чтобы перенаправить с https на https, однако это небольшой барьер в 2020 году.

 0
Author: undefined, 2020-02-04 20:10:35