Intereting Posts
Является ли функция wp_read_audio_metadata () устаревшей? Запрос нескольких пользовательских типов сообщений и исключение термина таксономии Ясность, необходимая для использования нескольких 403 запрещенных функций header () в начале файлов плагинов Предотвращение чтения роли других Почему WP_DEBUG работает только после вызова wp_debug_mode ()? Показать наиболее популярные за последние два дня Большая библиотека мультимедиа Пользовательский цикл для пользовательского типа сообщения Как защитить загрузки, если пользователь не зашел в систему? Доступ к административной области WordPress временно отключен из-за широко распространенных атак с грубой силой Как распечатать имена меню в цикле foreach? Можно ли фильтровать основной цикл, чтобы исключить сообщения из определенной категории? Условные меню на основе заголовка страницы Кто-нибудь понял, как использовать WordPress MultiSite с помощью Domain Mapping & SSL? Каковы оттенки темы?

Принудительный SSL-протокол для дочерних сайтов субдоменов с несколькими субсайтами + настройка cPanel

Я использую multisite WP, используя субдомены. Я хотел бы заставить SSL-протокол для всех запросов, и у меня возникает проблема для запросов без SSL на моих дочерних сайтах. Я использую плагин WP Force SSL . Я немного поработал и попробовал следующую директиву .htaccess, но она не работает (и ничего не делает):

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Например:

  • http: //derpsite.tld = перенаправление на протокол SSL
  • https: //derpsite.tld = работает
  • http: //child1.derpsite.tld = breaks. В частности, я получаю страницу с ошибкой http://child1.derpsite.tld/cgi-sys/defaultwebpage.cgi cPanel
  • https: //child1.derpsite.tld = работает

ИЗМЕНИТЬ 1

Я обратился к обоим моим хостам (выделенный сервер с установленной cPanel) и cPanel (последний, с которым у меня все еще есть открытый билет). cPanel упомянул:

Apache на cPanel настроен немного иначе, чем другие серверы, к которым вы можете привыкнуть. По умолчанию Apache принимает любое запрашиваемое доменное имя, потому что оно настроено как шаблон. На серверах cPanel виртуальные хосты настроены специально для создаваемых вами доменов. Например, когда вы создали учетную запись cPanel для errorslawyer.com, она настроила конфигурацию, специфичную для errorslawyer.com. Предположим, я указываю DNS для своего домена thisisarealdomain.com на ваш сервер. Когда я делаю запрос для thisisarealdomain.com, Apache проверяет его конфигурацию для этого домена, не находит его, а затем возвращает страницу cPanel по умолчанию.

Похоже, что у вас настроен DNS правильно, я предполагаю, что поддомен имеет подменю, указывающую на ваш сервер, но Apache не знает, что делать с запросом. По крайней мере, на стороне, не связанной с SSL. Что должно решить проблему, так это добавить поддомен подстановки в cPanel [ https://documentation.cpanel.net/display/ALD/Subdomains ], чтобы добавить Apache vhost для * .derpsite.tld. Затем, когда запрашивается что-либо .derpsite.tld, Apache сможет найти этого vhost и узнать, что загрузить.

Причина, по которой может работать SSL-версия, скорее всего, установит SSL как * .derpsite.tld, который создает этот SSL-хост.

Основываясь на этом вводе, я:

  • Добавлен поддомен подстановочного знака в cPanel (и у него есть корень документа поддомена, указывающий на корень основного сайта) … который теперь выдает 500 internal server error для http://child1.derpsite.tld и https://child1.derpsite.tld )
  • В настоящее время я просматриваю, как я установил SSL

EDIT 2

500 internal server error похоже, была результатом установки моего SSL в подстановочном домене; см. мой ответ

Solutions Collecting From Web of "Принудительный SSL-протокол для дочерних сайтов субдоменов с несколькими субсайтами + настройка cPanel"

Из описания ошибки, которую вы получаете, похоже, что вы вообще не получаете доступ к своему программному обеспечению, связанному с учетной записью, при попытке получить доступ к ребенку по http. Это звучит как ошибка конфигурации веб-сервера, поэтому в вашем случае вам нужно убедиться, что в вашей cpanel вы включили субдомены для http и не только https

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

  • siteurl и home в таблице базы данных параметров для каждого сайта (или в wp-admin … ~/wp-admin/network/sites.php > Edit Site > Site Address (URL) для каждого сайта), необходимо использовать https:// в URL-адресе
  • Если для корневого домена, а не для подстановочного домена, устанавливается SSL-подстановочный знак (который, как я полагаю, будет иметь место для большинства желающих использовать SSL для мультисайта, управляемого субдоменами) . Я установил SSL на * derpsite.tld и удалил / переустановил его для derpsite.tld
  • В DNS подстановочная запись «A» должна указывать на IP-адрес сервера, то есть *.derpsite.tld -> YOURSERVERIP
  • В cPanel необходимо создать поддомен подстановки ( *.derpsite.tld ), а каталог поддоменов должен быть корневым каталогом (в большинстве случаев cPanel это будет /public_html … потому что, если вы используете многопользовательский режим, t действительно хотят создавать реальные каталоги для поддоменов дочернего сайта)
  • Дополнительное примечание: если вы выполняете сопоставление доменов, вам, скорее всего, придется « припарковать » свой внешний домен через WHM или cPanel, чтобы заставить его работать принудительно через SSL. Кроме того, по сравнению с отображением домена 4.5+ является родным ). Обратите внимание: на момент написания я использую WP v.4.8.2 и cPanel v.66.0.23 … сайтам, на которых установлена ​​версия WP до 4.5, может потребоваться другая конфигурация
  • Я не совсем уверен, что это необходимо, но у меня есть следующие директивы в моем корневом файле .htacess :

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^my\-mapped\-external\-domain\.tld[NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://my-mapped-external-domain.tld/$1 [R,L]

Надеюсь, это поможет кому-то!

Поскольку это классифицируется как 2 разных домена, это нужно сделать в 2 частях. Попробуй это:

 RewriteEngine On RewriteCond %{HTTP_HOST} ^derpsite\.tld [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://derpsite.tld/$1 [R,L] RewriteCond %{HTTP_HOST} ^child1\.derpsite\.tld [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://child1.derpsite.tld/$1 [R,L] 

Обычно вам не нужно запускать плагины для принудительного SSL, если вы хорошо настроили websever.

Вам просто нужны Settings -> General и измените оба URL-адреса на https:// а не на http:// . Также продуть кеширующие плагины – всегда хорошая идея. Как я вижу, SSL-сертификаты на месте и работают на вас на основе того, что вы сказали.

Ядром этого плагина вы упомянули следующее:

 // "The Core" define('FORCE_SSL' , true); if (defined('FORCE_SSL')) add_action('template_redirect', 'force_ssl'); function force_ssl(){ if ( FORCE_SSL && !is_ssl () ) { wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 ); exit(); } } 

Как вы можете видеть, PHP или WordPress использовался для принудительного перенаправления. Вместо этого эти перенаправления лучше и умнее на уровне веб-сервера. Не нужно использовать PHP.