web-dev-qa-db-fra.com

Forçage du protocole SSL pour les sites enfants de sous-domaines multisites + Configuration cPanel

J'exécute un WP multisite utilisant des sous-domaines. Je souhaite forcer le protocole SSL pour toutes les demandes et je rencontre un problème pour les demandes non SSL sur mes sites enfants. J'utilise le plugin WP Force SSL . J'ai fouillé un peu et essayé la directive .htaccess suivante, mais cela ne fonctionne pas (ni rien):

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

Par exemple:

EDIT 1

J'ai contacté à la fois mon hôte (serveur dédié sur lequel cPanel est installé) et cPanel (ce dernier avec lequel j'ai encore un ticket ouvert). cPanel a mentionné:

Apache sur cPanel est configuré un peu différemment des autres serveurs auxquels vous êtes peut-être habitué. Par défaut, Apache acceptera tout nom de domaine demandé, car il est configuré en tant que caractère générique. Sur les serveurs cPanel, les hôtes virtuels sont configurés spécifiquement pour les domaines que vous créez. Par exemple, lorsque vous avez créé le compte cPanel pour défautslawyer.com, il a configuré une configuration spécifique à défautslawyer.com. Disons que je pointe le DNS de mon domaine thisisarealdomain.com sur votre serveur. Lorsque je fais la demande pour thisisarealdomain.com, Apache vérifie sa configuration pour ce domaine, ne la trouve pas, puis renvoie la page par défaut de cPanel.

On dirait que le DNS est configuré correctement, je suppose un enregistrement de sous-domaine générique pointant vers votre serveur, mais Apache ne sait pas quoi faire avec ce qui est demandé. Au moins du côté non-SSL des choses. Ce qui devrait résoudre le problème est d’ajouter un sous-domaine générique dans cPanel [ https://documentation.cpanel.net/display/ALD/Subdomains ] pour que le vhost Apache pour * .derpsite.tld soit ajouté. Ensuite, lorsque vous demanderez n'importe quoi. Derpsite.tld, Apache sera en mesure de trouver cet hôte et de savoir quoi charger.

La raison pour laquelle la version SSL fonctionne peut-être est que vous avez probablement installé SSL en tant que * .derpsite.tld, ce qui crée ce SSL vhost.

Sur la base de cette entrée, j'ai:

  • Ajout d'un sous-domaine générique dans cPanel (et que la racine du document de sous-domaine pointe vers la racine du site principal ...), ce qui déclenche maintenant un 500 internal server error pour http://child1.derpsite.tld et https://child1.derpsite.tld.
  • Je suis en train de revoir la configuration de mon SSL

EDIT 2

Le 500 internal server error ci-dessus semble avoir été le résultat de l'installation de mon SSL sur un domaine générique; s'il vous plaît voir mon ' répondre ' ci-dessous

1
Ryan Dorn

D'après la description de l'erreur que vous obtenez, il semble que le logiciel associé à votre compte ne s'affiche pas du tout lorsque vous tentez d'accéder à l'enfant sur http. Cela ressemble à une erreur de configuration du serveur Web. Dans votre cas, vous devez vous assurer que, dans votre cpanel, vous avez activé les sous-domaines pour http et pas seulement https.

2
Mark Kaplun

Merci à tous ceux qui ont fait des commentaires à ce sujet, cela m'a vraiment aidé à me diriger dans la bonne direction et, enfin, je crois que je sais ce qui s'est passé, une combinaison de plusieurs facteurs. Je réalise que cela n’est peut-être pas lié à {'strictement WP _', mais pour ceux qui utilisent cPanel , ce qui suit devrait être utile. J'ai compilé quelques éléments de "règle empirique" qui, lorsqu'ils sont tous ensemble, semblent avoir résolu le problème du forçage des protocoles SSL:

  • Les champs siteurl et home dans la table de la base de données des options pour chaque site (ou dans wp-admin ... ~/wp-admin/network/sites.php > Edit Site > Site Address (URL) pour chaque site) doivent utiliser https:// dans l'URL.
  • Si vous utilisez un caractère générique SSL (ce qui, je suppose, conviendra à la plupart des personnes souhaitant utiliser SSL sur un multisite piloté par un sous-domaine))} est installé pour le domaine racine, pas un domaine générique. . J'avais mon SSL installé sur * derpsite.tld et enlevé/réinstallé pour derpsite.tld
  • Dans le DNS, un enregistrement générique "A" doit pointer vers l’IP du serveur, c’est-à-dire *.derpsite.tld -> YOURSERVERIP
  • Dans cPanel, un sous-domaine générique (*.derpsite.tld) doit être créé et le répertoire de sous-domaine doit être le répertoire racine (dans la plupart des cPanel cases, ce sera /public_html ... car, si vous exécutez un multisite, vous ne voulez pas réellement que de vrais répertoires soient créés pour les sous-domaines 'site enfant')
  • Remarque supplémentaire: si vous effectuez un mappage de domaine, vous devrez probablement " stocker " votre domaine externe via WHM ou cPanel pour le faire exécuter de manière forcée via SSL. En outre, à compter de 4.5+, le mappage de domaine est natif ). Remarque: au moment de la rédaction de ce document, j'utilise les sites WP v.4.8.2 et cPanel v.66.0.23 ... exécutant une version WP antérieure à la version 4.5. peut nécessiter une configuration différente}
  • Je ne suis pas tout à fait sûr que cela soit nécessaire, mais j'ai les directives suivantes dans mon fichier racine .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]

J'espère que cela aide quelqu'un!

1
Ryan Dorn

Parce que cela est classé comme 2 domaines différents, il faudra le faire en 2 parties. Essaye ça:

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]
0
SEO DEVS

Généralement, vous n'avez pas besoin d'exécuter de plug-ins pour forcer SSL si vous avez bien configuré Websever.

Vous avez juste besoin de Settings -> General et changez les deux URL pour avoir https:// au lieu de http://. Aussi, purger les plugins de mise en cache est toujours la bonne idée. À mon avis, les certificats SSL sont en place et fonctionnent pour vous en fonction de ce que vous avez dit.

Le noyau de ce plugin que vous avez mentionné est le suivant:

// "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();
 }
}

Comme vous pouvez le voir, PHP ou WordPress a été utilisé pour forcer la redirection. Au lieu de cela, ces re-directions sont meilleures et plus intelligentes au niveau du serveur Web. Aucun PHP ne doit être utilisé.

0
prosti