Перевод MultiSite установки с HTTP на HTTPS
Я установил MultiSite с URL в формате http://example.com, но теперь хочу, чтобы все запросы использовали HTTPS. Пытаюсь изменить URL на https://example.com. Я обновил все значения siteurl
и home
в базе данных на версии с https, но сайт по-прежнему загружается по HTTP без перенаправления на HTTPS.
Я знаю, что можно настроить правила в htaccess, но это может привести к ошибкам. В обычных установках WordPress автоматически перенаправляет все запросы на канонические URL, указанные в настройках siteurl
и home
, поэтому предполагаю, что MultiSite должен работать аналогично.

Я столкнулся с той же проблемой: в WordPress Multisite нет опции или настройки, которая определяет, использует ли сайт домен HTTP или HTTPS. Даже после замены всех вхождений в базе данных, посетитель сайта все еще может зайти и перемещаться по сайту по HTTP, без перенаправления на HTTPS.
Следующее простое решение сработало для меня: я добавил это правило mod_rewrite
в свой файл .htaccess, прямо перед правилами перезаписи, специфичными для WordPress.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Поскольку это правило не определяет конкретный домен, оно идеально подходит для нужд WordPress Multisite.
Я нашел это правило в следующей теме: https://stackoverflow.com/questions/4398951/force-ssl-https-using-htaccess-and-mod-rewrite

Этот тип решения отлично подходит для мультисайта с унифицированным протоколом. Когда вы захотите иметь смесь SSL и не-SSL сайтов в сети мультисайтов, всё становится сложным. Очень сложным.

Действительно, в моём случае это была сеть, где я перевёл все сайты на SSL одновременно.

Все плагины, которые я видел, предназначены для установки HTTPS на определенных страницах, а не на всем сайте. В обычных установках WordPress стандартный метод для перевода всего сайта на HTTPS — это установка значений siteurl
и home
. Даже если бы были доступные плагины, есть несколько причин, почему их использование — плохая идея, когда можно просто установить конфигурационное значение (безопасность, производительность и т. д.). Кроме того, я почти уверен, что неважно, есть ли SSL-сертификат или нет. WordPress не будет проверять это при определении канонического URL.

Верно и верно, я просто интересовался, настроено ли у тебя это уже или нет (многие не знают, что нужен SSL-сертификат, если хочешь по-настоящему использовать SSL, отсюда и вопрос). Я вспомнил, что у меня был сайт на SSL какое-то время назад (не просто отдельные страницы, а весь сайт, как тебе нужно). Я поищу код.

Хм... не смог найти код, который использовал тогда. Однако я нашел это: http://prosauce.org/blog/2010/08/enable-complete-support-for-ssl-on-wordpress/

Я установил Better WP Security по другой причине, но оказалось, что у него есть опция для принудительного перевода всех запросов страниц (и фронтенда, и бэкенда) на SSL.

Лучшим решением, на мой взгляд, было бы то, которое не использует плагин. Таким образом, каждый запрос не нужно будет обрабатывать через плагин.

Я изменил правила, специфичные для определенного хоста. Но теперь все остальные блоги перенаправляются на этот. Изменил "%{HTTP_HOST}" на конкретный домен и оставил часть "%{REQUEST_URI}".
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://gezentiyiz.biz%{REQUEST_URI} [L,R=301]
По моему мнению, добавление дополнительных строк RewriteRule для других доменов может решить проблему, но мне интересно, есть ли более простой способ сделать это. Потому что каждый раз при создании блога нам нужно изменять файл .htaccess???
Редактирование: Я решил проблему, изменив RewriteRule следующим образом:
RewriteRule http://gezentiyiz.biz%{REQUEST_URI} https://gezentiyiz.biz%{REQUEST_URI} [L,R=301]

"Заменил %{HTTP_HOST}
на конкретный домен" - Но зачем? Это звучит как другой вопрос, а не как "ответ"? Вы пытаетесь избирательно перенаправлять только определённые сайты на HTTPS?? "Я решил проблему, изменив RewriteRule вот так" - За исключением того, что это правило не имеет смысла и ничего не сделает!? Чтобы сделать правило зависимым от имени хоста, вам нужно проверить запрошенный HTTP-заголовок Host
(переменная сервера Apache HTTP_HOST
) в отдельном условии (директива RewriteCond
).
