Problèmes de numéro de port réseau multisite?


9

Je suis ce tutoriel pour créer un réseau de sites WordPress. Après avoir ajouté

/* Multisite */
define( 'WP_ALLOW_MULTISITE', true ); 

à mon wp-config.phpfichier et quand je commence à configurer le réseau multisite, j'ai eu cette erreur

ERROR: You cannot install a network of sites with your server address.
You cannot use port numbers such as :8080

J'essaye de changer

 Listen 0.0.0.0:8080
Listen [::0]:8080  

à

 Listen 0.0.0.0:80
Listen [::0]:80

à partir httpd.confd'Apache , mais en raison de ce serveur WAMP reste orange. Comment résoudre ce problème. Je suis nouveau sur WordPress. Toute aide serait très appréciée.


Quelle est la sortie de echo get_clean_basedomain();? Les ports pris en charge semblent être :80et :443.
birgire

Réponses:


8

Avertissement: il s'agit simplement d'un test pour les installations de développement et non pour les sites de production

J'étais curieux de voir s'il y avait une solution de contournement, pour ceux qui veulent développer des multisites sur leurs installations de développement mais sur des ports différents de :80et :443, par exemple :8080.

Je n'ai trouvé que ce billet de blog d'Henri Benoit. Là, il donne des exemples sur la façon de modifier le noyau 3.9.1, pour contourner les restrictions du noyau.

Voici un plugin indispensable/wp-content/mu-plugins/wpse-ms-on-different-port.php où nous essayons d'éviter les modifications de base:

<?php 
/**
 * Test for multisite support on a different port than :80 and :443 (e.g. :8080)
 *
 * Here we assume that the 'siteurl' and 'home' options contain the :8080 port
 *
 * WARNING: Not suited for production sites!
 */

/**
 * Get around the problem with wpmu_create_blog() where sanitize_user()  
 * strips out the semicolon (:) in the $domain string
 * This means created sites with hostnames of 
 * e.g. example.tld8080 instead of example.tld:8080
 */
add_filter( 'sanitize_user', function( $username, $raw_username, $strict )
{
    // Edit the port to your needs
    $port = 8080;

    if(    $strict                                                // wpmu_create_blog uses strict mode
        && is_multisite()                                         // multisite check
        && $port == parse_url( $raw_username, PHP_URL_PORT )      // raw domain has port 
        && false === strpos( $username, ':' . $port )             // stripped domain is without correct port
    )
        $username = str_replace( $port, ':' . $port, $username ); // replace e.g. example.tld8080 to example.tld:8080

    return $username;
}, 1, 3 );

/**
 * Temporarly change the port (e.g. :8080 ) to :80 to get around 
 * the core restriction in the network.php page.
 */
add_action( 'load-network.php', function()
{
    add_filter( 'option_active_plugins', function( $value )
    {
        add_filter( 'option_siteurl', function( $value )
        {
            // Edit the port to your needs
            $port = 8080;

            // Network step 2
            if( is_multisite() || network_domain_check() )
                return $value;

            // Network step 1
            static $count = 0;
            if( 0 === $count++ )
                $value = str_replace( ':' . $port, ':80', $value );
            return $value;
        } );
        return $value;
    } );
} );

Je viens de tester cela sur mon installation de développement, mais cela pourrait bien sûr nécessiter plus de vérifications ;-)


1
Veuillez me dire où ce code doit être utilisé. Dans mon cas, je n'ai pas de chemin comme /wp-content/mu-plugins/wpse-ms-on-different-port.php mon problème est résolu en utilisant if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {dans wp-admin\includes\network.phpmais Hacking Core est une mauvaise pratique.
raxa

1
Vous pouvez créer le mu-pluginsrépertoire sous /wp-content/. Notez qu'il ne suffit pas de modifier le noyau de cette façon, car vous ne pourrez pas créer de nouveaux sites car il sanitize_user()supprime le point-virgule (:). @raxa
birgire

5

Vous ne pouvez pas utiliser le port 8080. Je ne sais pas pourquoi, car il s'agit d'un port assez courant pour un serveur Web. Cependant, vous ne pouvez pas :

121         if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443' ) ) ) ) {
122                 echo '<div class="error"><p><strong>' . __( 'ERROR:') . '</strong> ' . __( 'You cannot install a network of sites with your server address.' ) . '</p></div>';
123                 echo '<p>' . sprintf(
124                         /* translators: %s: port number */
125                         __( 'You cannot use port numbers such as %s.' ),
126                         '<code>' . $has_ports . '</code>'
127                 ) . '</p>';
128                 echo '<a href="' . esc_url( admin_url() ) . '">' . __( 'Return to Dashboard' ) . '</a>';
129                 echo '</div>';
130                 include( ABSPATH . 'wp-admin/admin-footer.php' );
131                 die();
132         }

Remarquez ! in_array( $has_ports, array( ':80', ':443' ) ). Ces ports sont codés en dur. Il n'y a pas de filtres que vous pouvez utiliser pour les modifier, même pas get_clean_basename()(et j'ai peur de deviner quelles horreurs vous créeriez si vous pouviez modifier ce que cela renvoie).

Modifiez votre serveur pour utiliser le port 443 ou le port 80 à la place.


@ s_ha_dum ♦ Je résous ce problème en ajustant le code pour inclure le port 8080 requis. Il ressemble à ceci; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { innetwork.php in wp-admin\includes\network.php - [Line-121]
raxa

1
Hacker Core est une mauvaise pratique. Modifiez votre serveur pour utiliser 80 ou 443 et soumettez un correctif à WordPress pour autoriser le port 8080.
s_ha_dum
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.