Multisite Network Port Num Probleme?

9

Ich folge diesem Tutorial , um ein Netzwerk von WordPress-Sites zu erstellen. Nach dem Hinzufügen

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

In meiner wp-config.phpDatei und wenn ich anfange, ein Netzwerk mit mehreren Standorten zu konfigurieren, wurde dieser Fehler angezeigt

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

Ich versuche mich zu ändern

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

zu

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

von httpd.confApache aber aufgrund dieses Wamp-Servers bleibt orange. Wie man das löst. Ich bin ein Neuling in WordPress. Jede Hilfe wäre sehr dankbar.

Raxa
quelle
Was ist die Ausgabe von echo get_clean_basedomain();? Unterstützte Ports scheint zu sein , :80und :443.
Birgire

Antworten:

8

Warnung: Dies ist nur ein Test für Entwicklerinstallationen und nicht für Produktionsstandorte

Ich war neugierig zu sehen, ob es eine Problemumgehung für diejenigen gibt, die Multisites auf ihren Entwicklungsinstallationen entwickeln möchten, aber auf anderen Ports als :80und :443, z :8080.

Ich habe nur diesen Blog-Beitrag von Henri Benoit gefunden. Dort gibt er Beispiele, wie man den 3.9.1-Kern modifiziert, um die Kernbeschränkungen zu umgehen.

Hier ist ein Plugin, das unbedingt verwendet werden muss, um Kernänderungen /wp-content/mu-plugins/wpse-ms-on-different-port.phpzu vermeiden:

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

Ich habe dies gerade bei meiner Entwicklerinstallation getestet, aber dies könnte natürlich weitere Überprüfungen erfordern ;-)

Birgire
quelle
1
Bitte sagen Sie mir, wo dieser Code verwendet werden muss. In meinem Fall habe ich keinen Pfad wie /wp-content/mu-plugins/wpse-ms-on-different-port.php Mein Problem wird durch die Verwendung von if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {in gelöst, wp-admin\includes\network.phpaber Hacking Core ist eine schlechte Praxis.
Raxa
1
Sie können das mu-pluginsVerzeichnis unter erstellen /wp-content/. Beachten Sie, dass es nicht ausreicht, den Kern auf diese Weise zu ändern, da Sie keine neuen Websites erstellen können, da sanitize_user()das Semikolon (:) entfernt wird. @raxa
Birgire
5

Sie können Port 8080 nicht verwenden. Ich habe keine Ahnung warum, da dies ein ziemlich häufiger Port für einen Webserver ist. Allerdings können Sie nicht :

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         }

Hinweis ! in_array( $has_ports, array( ':80', ':443' ) ). Diese Ports sind fest codiert. Es gibt keine Filter, mit denen Sie sie ändern können, auch nicht in get_clean_basename()(und ich habe Angst zu erraten, welche Schrecken Sie verursachen würden, wenn Sie ändern könnten, was das zurückgibt).

Ändern Sie Ihren Server so, dass stattdessen Port 443 oder Port 80 verwendet wird.

s_ha_dum
quelle
@ s_ha_dum ♦ Ich löse dieses Problem, indem ich den Code so anpasse, dass er den erforderlichen Port 8080 enthält. So sieht es aus. if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { innetwork.php in wp-admin\includes\network.php - [Line-121]
raxa
1
Hacking Core ist eine schlechte Praxis. Ändern Sie Ihren Server, um 80 oder 443 zu verwenden, und senden Sie einen Patch an WordPress, um Port 8080 zuzulassen.
s_ha_dum