Problemas numéricos de porta de rede multisite?

8

Estou seguindo Este tutorial para Crie uma rede de sites do WordPress. Depois de adicionar

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

ao meu arquivo wp-config.php e quando eu começo a configurar a rede multisite, recebo este erro

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

Eu tento mudar

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

para

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

de httpd.conf do Apache, mas devido a esse servidor wamp permanece laranja. Como resolver isso. Eu sou um novato no WordPress Qualquer ajuda seria muito apreciada.

    
por raxa 27.12.2015 / 16:12

2 respostas

6

Aviso: este é apenas um teste para instalações de desenvolvedores e não sites de produção

Eu estava curioso para ver se havia uma solução alternativa para aqueles que desejam desenvolver vários sites em suas instalações de desenvolvedor, mas em portas diferentes de :80 e :443 , por exemplo, %código%.

Eu só encontrei esta postagem no blog de Henri Benoit. Lá ele dá exemplos de como modificar o núcleo 3.9.1, para contornar as restrições centrais.

Aqui está um must-use plugin :8080 onde tentamos evitar as modificações do núcleo:

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

Acabei de testar isso na minha instalação dev, mas isso pode precisar de mais verificações, claro; -)

    
por birgire 27.12.2015 / 20:34
5

Você não pode usar a porta 8080. Não tenho ideia do motivo, pois essa é uma porta bastante comum para um servidor da web. No entanto, você não pode :

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         }

Observe ! in_array( $has_ports, array( ':80', ':443' ) ) . Essas portas são codificadas. Não há filtros que você possa usar para alterá-los, nem mesmo em get_clean_basename() (e tenho medo de adivinhar quais horrores você criaria se pudesse alterar o que isso retorna).

Altere seu servidor para usar a porta 443 ou a porta 80.

    
por s_ha_dum 27.12.2015 / 17:24