web-dev-qa-db-fra.com

Problèmes liés au numéro de port du réseau multisite?

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

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

dans mon fichier wp-config.php et quand je commence à configurer un 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 de httpd.conf de Apache mais à cause de ce serveur wamp reste orange. Comment résoudre ce problème .Je suis un nouveau dans WordPress Toute aide serait très appréciée.

8
raxa

Avertissement: Ceci est juste un test pour les installations de développement et non pour les sites de production

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

J'ai seulement trouvé ceci blog post par Henri Benoit. Là, il donne des exemples sur la façon de modifier le noyau 3.9.1 pour contourner les restrictions fondamentales.

Voici un must-use} _ plugin /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 ceci sur mon installation de développement, mais cela pourrait nécessiter plus de vérifications bien sûr ;-)

6
birgire

Vous ne pouvez pas utiliser le port 8080. Je ne sais pas pourquoi, car il s'agit d'un port assez commun 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. Vous ne pouvez utiliser aucun filtre pour les modifier, pas même dans get_clean_basename() (et j'ai peur de deviner les horreurs que vous créeriez si vous pouviez modifier les résultats).

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

5
s_ha_dum