Masalah Port Port Jaringan Multisite?

9

Saya mengikuti tutorial ini untuk Membuat Jaringan Situs WordPress. Setelah menambahkan

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

ke wp-config.phpfile saya dan ketika saya mulai mengkonfigurasi jaringan multisite saya mendapat kesalahan ini

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

Saya mencoba untuk berubah

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

untuk

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

dari httpd.confApache tetapi karena server wamp ini tetap oranye. Bagaimana mengatasinya. Saya baru mengenal WordPress. Bantuan apa pun akan sangat dihargai.

raxa
sumber
Apa output dari echo get_clean_basedomain();? Port yang didukung tampaknya :80dan :443.
birgire

Jawaban:

8

Peringatan: Ini hanya tes untuk instalasi dev dan bukan situs produksi

Saya ingin tahu apakah ada solusi, bagi mereka yang ingin mengembangkan multisite pada instalasi dev mereka tetapi pada port yang berbeda dari :80dan :443, misalnya :8080.

Saya hanya menemukan posting blog ini oleh Henri Benoit. Di sana ia memberikan contoh bagaimana memodifikasi inti 3.9.1, untuk mengatasi batasan inti.

Berikut adalah plugin yang harus digunakan di/wp-content/mu-plugins/wpse-ms-on-different-port.php mana kami mencoba menghindari modifikasi inti:

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

Saya baru saja menguji ini pada instalasi dev saya, tetapi ini mungkin membutuhkan lebih banyak pemeriksaan tentu saja ;-)

birgire
sumber
1
Tolong beritahu saya di mana kode ini harus digunakan. Dalam kasus saya saya tidak punya jalan seperti /wp-content/mu-plugins/wpse-ms-on-different-port.php masalah saya diselesaikan dengan menggunakan if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {di wp-admin\includes\network.phptetapi Hacking Core praktek yang buruk.
raxa
1
Anda dapat membuat mu-pluginsdirektori di bawah /wp-content/. Perhatikan bahwa memodifikasi inti tidak cukup, karena Anda tidak akan dapat membuat situs baru karena sanitize_user()menghapus titik koma (:). @raxa
birgire
5

Anda tidak dapat menggunakan port 8080. Saya tidak tahu mengapa karena itu adalah port yang cukup umum untuk server web. Namun, Anda tidak dapat :

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         }

Perhatikan ! in_array( $has_ports, array( ':80', ':443' ) ). Port-port tersebut adalah hard-coded. Tidak ada filter yang dapat Anda gunakan untuk mengubahnya, bahkan di get_clean_basename()(dan saya takut untuk menebak kengerian apa yang akan Anda buat jika Anda bisa mengubah apa yang mengembalikan).

Ubah server Anda untuk menggunakan port 443 atau port 80 sebagai gantinya.

s_ha_dum
sumber
@ s_ha_dum ♦ Saya mengatasi masalah ini dengan menyesuaikan kode untuk memasukkan port 8080 yang diperlukan sehingga terlihat seperti ini; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { innetwork.php in wp-admin\includes\network.php - [Line-121]
raxa
1
Peretasan Inti adalah praktik yang buruk. Ubah server Anda untuk menggunakan 80 atau 443 dan kirimkan tambalan ke WordPress untuk mengizinkan port 8080.
s_ha_dum