web-dev-qa-db-fra.com

Comment utiliser Wordpress multisite avec des sites mixtes HTTP et HTTPS?

J'ai une installation multi-wordpress (3.x) avec 5 sites et un seul utilise SSL.

Tous ces éléments fonctionnent sur leur propre domaine, et le http://ssldomain.com est transféré à https://ssldomain.com .

Pourtant, cela semble casser les mises à jour de wordpress.

Maintenant je reçois un message:

Mise à niveau du réseau

https://nonsecureddomain.com

Attention! Problème de mise à jour https://nonsecureddomain.com . Votre serveur peut ne pas être en mesure de se connecter aux sites qui y sont exécutés. Message d'erreur: SSL: aucun nom de sujet de certificat alternatif ne correspond au nom d'hôte cible 'non dominé par domaine.com'

Il semble qu’à un moment donné, WP décide d’utiliser le protocole HTTPS pour ce domaine, où il n’est pas censé le faire.

Le réseau lui-même est celui qui fonctionne sur HTTPS (SSL), et ce qui me préoccupe, c’est que

https://mydecureddomain.com/wp-admin/network/site-info.php?id=5

La liste du site avec un préfixe HTTPS codé en dur qui semble être configurable?

enter image description here

5
sorin

C’est une vieille question, mais j’ai pensé que je posterais ma réponse, car j’avais juste à faire face à ce problème et à une solution de contournement temporaire qui l’a fait fonctionner pour moi.

AVERTISSEMENT: Cela nécessite de modifier le noyau, ce qui n'est PAS recommandé. Si vous utilisez cette solution de contournement, vous devez probablement supprimer cette solution une fois la mise à jour terminée.

Depuis WP 4.1, le problème existe dans la ligne 67 de /wp-admin/network/upgrade.php. Ici, $upgrade_url est transmis à wp_remote_get(). Mais $upgrade_url obtient ses signaux SSL de votre page actuelle. Par conséquent, si votre page actuelle est HTTPS, il adoptera HTTPS pour tous les sites en cours de mise à niveau, même si ces sites ne sont pas supposés être HTTPS.

Maintenant, à partir du code, il semble que vous devriez pouvoir filtrer admin_url() afin de changer $upgrade_url de HTTPS à HTTP. Cependant, lorsque j'ai essayé ce filtre, cela n'a pas fonctionné. J'ai donc dû insérer le code suivant juste avant wp_remote_get() à la ligne 67:

if( strpos( $url, $your_ssl_domain ) === false )
    $upgrade_url = str_replace( 'https', 'http', $upgrade_url );

J'espère que ça aide quelqu'un.

2
Sam

Merci à @Sorin d'avoir posté le trac. À partir de là, j'ai trouvé une solution utilisant uniquement des filtres dans functions.php (donc pas d'édition du noyau)

Merci @mensmaximus pour avoir posté ici:

Lien: https://core.trac.wordpress.org/ticket/33887#comment:3

<?php
add_filter( 'network_admin_url', 'mmx_network_admin_url', 1, 2 );
function mmx_network_admin_url( $url, $path ){
    $url = "https://my_master_domain/wp-admin/network/" . $path;
    return $url;
}

add_filter( 'admin_url', 'mmx_admin_url', 1, 3 );
function mmx_admin_url( $url, $path, $blog_id ) {
    $blog_id = ( $blog_id ) ? $blog_id : get_current_blog_id();
    if ( preg_match( '|^http(s)?://|', $url) ) {
        $blog_details = get_blog_details( $blog_id );
        $url = $blog_details->siteurl . '/wp-admin/' . $path;
    }
    return $url;
}
1
raison

C'est actuellement un bogue connu et un correctif a déjà été soumis pour révision. N'hésitez pas à ajouter vos commentaires directement au bogue soulevé:

https://core.trac.wordpress.org/ticket/31405

1
sorin