¿Problemas de número de puerto de red multisitio?

9

Estoy siguiendo este tutorial para crear una red de sitios de WordPress. Después de agregar

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

a mi wp-config.phparchivo y cuando empiezo a configurar la red multisitio recibí este error

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

Trato de cambiar

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

a

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

a partir httpd.confde Apache, pero debido a este servidor Wamp permanezca de color naranja. Cómo resolver esto. Soy nuevo en WordPress Cualquier ayuda sería muy apreciada.

raxa
fuente
¿Cuál es el resultado de echo get_clean_basedomain();? Los puertos admitidos parecen ser :80y :443.
Birgire

Respuestas:

8

Advertencia: esto es solo una prueba para instalaciones de desarrollo y no para sitios de producción

Tenía curiosidad por ver si había una solución, para aquellos que quieren desarrollar multi-sitio en sus instalaciones dev pero en diferentes puertos que :80y :443, por ejemplo :8080.

Solo encontré esta publicación de blog de Henri Benoit. Allí da ejemplos de cómo modificar el núcleo 3.9.1, para sortear las restricciones del núcleo.

Aquí hay un complemento de uso obligatorio/wp-content/mu-plugins/wpse-ms-on-different-port.php en el que intentamos evitar las modificaciones principales:

<?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;
    } );
} );

Acabo de probar esto en mi instalación de desarrollo, pero esto podría necesitar más controles, por supuesto ;-)

Birgire
fuente
1
Por favor, dime dónde se debe usar este código. En mi caso, no tengo una ruta como /wp-content/mu-plugins/wpse-ms-on-different-port.php Mi problema se resuelve usando if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {in wp-admin\includes\network.phppero Hacking Core es una mala práctica.
raxa
1
Puede crear el mu-pluginsdirectorio en /wp-content/. Tenga en cuenta que no es suficiente modificar el núcleo de esa manera, porque no podrá crear nuevos sitios porque sanitize_user()elimina el punto y coma (:). @raxa
birgire
5

No puede usar el puerto 8080. No tengo idea de por qué, ya que es un puerto bastante común para un servidor web. Sin embargo, no puedes :

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         }

Aviso ! in_array( $has_ports, array( ':80', ':443' ) ). Esos puertos están codificados. No hay filtros que pueda usar para alterarlos, ni siquiera en get_clean_basename()(y me temo que adivinar qué horrores crearía si pudiera alterar lo que eso devuelve).

Modifique su servidor para usar el puerto 443 o el puerto 80 en su lugar.

s_ha_dum
fuente
@ s_ha_dum ♦ Resuelvo este problema ajustando el código para incluir el puerto 8080 requerido para que se vea así; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { ennetwork.php in wp-admin\includes\network.php - [Line-121]
raxa
1
Hackear Core es una mala práctica. Modifique su servidor para usar 80 o 443 y envíe un parche a WordPress para permitir el puerto 8080.
s_ha_dum