10

I am following This tutorial to Create a Network of WordPress Sites . After adding

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

to my wp-config.php file and when I start to configure multisite network I got this error

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

I try to change

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

to

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

from httpd.conf of Apache but due to this wamp server remains orange . How to solve this .I am a new to WordPress Any help would be highly appreciated .

1
  • What's the output of echo get_clean_basedomain(); ? Supported ports seems to be :80 and :443.
    – birgire
    Commented Dec 27, 2015 at 15:37

2 Answers 2

10

Update: Finally supported in WP 6.6. The core ticket here was recently merged in and closed.

Older answer:

Warning: This is just a test for dev installs and not production sites

I was curious to see if there was a workaround, for those who want to develope multisites on their dev installs but on different ports than :80 and :443, e.g. :8080.

I only found this blog post by Henri Benoit. There he gives examples how to modify the 3.9.1 core, to get around the core restrictions.

Here's a must-use plugin /wp-content/mu-plugins/wpse-ms-on-different-port.php where we try to avoid core modifications:

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

I just tested this on my dev install, but this might need more checks of course ;-)

2
  • 1
    Plz tell me where this code has to be used. In my case I have no path like /wp-content/mu-plugins/wpse-ms-on-different-port.php My issue is solved by using if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { in wp-admin\includes\network.php but Hacking Core is bad practice.
    – raxa
    Commented Dec 28, 2015 at 12:53
  • 1
    You can create the mu-plugins directory under /wp-content/. Note that it's not enough to modify the core that way, because you will not be able to create new sites because sanitize_user() strips out the semicolon (:). @raxa
    – birgire
    Commented Dec 28, 2015 at 14:03
5

You can't use port 8080. I have no idea why as that is a fairly common port for a web server. However, you can't:

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         }

Notice ! in_array( $has_ports, array( ':80', ':443' ) ). Those ports are hard-coded. There are no filters you can use to alter them, not even in get_clean_basename() (and I am afraid to guess at what horrors you'd create if you could alter what that returns).

Alter your server to use port 443 or port 80 instead.

2
  • @ s_ha_dum♦ I solve this issue by adjusting the code to include the required port 8080 so It looks like this; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { in network.php in wp-admin\includes\network.php - [Line-121]
    – raxa
    Commented Dec 27, 2015 at 16:51
  • 1
    Hacking Core is bad practice. Alter your server to use 80 or 443 and submit a patch to WordPress to allow port 8080.
    – s_ha_dum
    Commented Dec 27, 2015 at 16:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.