Intereting Posts
Использование add_rewrite_rule Вкладки Visual Composer не работают на мобильных устройствах Попытка управлять шаблонами в блоге с множеством пользовательских таксономий Синтаксическая ошибка в функции короткого кода Корректировка перезаписи URL-адресов для пользовательского типа сообщения приводит к тому, что шаблон возвращается к index.php get_user_meta () не включает адрес электронной почты пользователя? Вложение шрифтов в wordpress Плагин для установки всех сообщений в определенной категории на определенный Post Format Собственная тема WordPress с пользовательскими АФК> Экспортировать все в формат темы? Как добавить миниатюру по умолчанию в elseif, если нет get_field ('photos'), и никакая миниатюра сообщения не существует? Лучший способ контроля версий файлов WordPress? Отображение списка пользовательских сообщений типа сообщения Содержимое страницы запроса из параметров темы? Как я могу назвать файл .php для отображения пользовательских сообщений в соответствии с термином таксономии? Как отладить плагин с Xdebug?

Принудительный 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.