พอร์ตเครือข่าย Multisite มีปัญหาหรือไม่


9

ฉันกำลังติดตามบทช่วยสอนนี้เพื่อสร้างเครือข่ายเว็บไซต์ WordPress หลังจากเพิ่ม

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

wp-config.phpไฟล์ของฉันและเมื่อฉันเริ่มกำหนดค่าเครือข่ายหลายไซต์ฉันได้รับข้อผิดพลาดนี้

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

ฉันพยายามเปลี่ยน

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

ถึง

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

จากhttpd.confApache แต่เนื่องจากเซิร์ฟเวอร์ wamp นี้ยังคงเป็นสีส้ม วิธีแก้ปัญหานี้ฉันใหม่กับ WordPress ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


ผลลัพธ์ของecho get_clean_basedomain();อะไร พอร์ตสนับสนุนน่าจะเป็นและ:80 :443
Birgire

คำตอบ:


8

คำเตือน: นี่เป็นเพียงการทดสอบสำหรับการติดตั้ง dev ไม่ใช่ไซต์ที่ใช้งานจริง

ผมอยากรู้เพื่อดูว่ามีวิธีแก้ปัญหาสำหรับผู้ที่ต้องการที่จะ multisites พัฒนาในการติดตั้ง dev ของพวกเขา แต่ในพอร์ตที่แตกต่างกว่า:80และเช่น:443:8080

ฉันพบโพสต์บล็อกนี้โดย Henri Benoit เท่านั้น ที่นั่นเขายกตัวอย่างวิธีการปรับเปลี่ยนคอร์ 3.9.1 เพื่อให้ได้ข้อ จำกัด หลัก

นี่คือปลั๊กอินที่ต้องใช้/wp-content/mu-plugins/wpse-ms-on-different-port.phpที่เราพยายามหลีกเลี่ยงการดัดแปลงหลัก:

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

ฉันเพิ่งทดสอบสิ่งนี้ในการติดตั้ง dev ของฉัน แต่นี่อาจต้องตรวจสอบเพิ่มเติมแน่นอน ;-)


1
โปรดบอกฉันว่าต้องใช้รหัสนี้ที่ไหน ในกรณีของฉันฉันไม่มีเส้นทางเหมือน/wp-content/mu-plugins/wpse-ms-on-different-port.php ปัญหาของฉันได้รับการแก้ไขโดยใช้if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {ใน wp-admin\includes\network.phpแต่การแฮ็กหลักคือการปฏิบัติที่ไม่ดี
raxa

1
คุณสามารถสร้างไดเรกทอรีภายใต้mu-plugins /wp-content/โปรดทราบว่ามันไม่เพียงพอที่จะแก้ไขแกนกลางด้วยวิธีนี้เพราะคุณจะไม่สามารถสร้างไซต์ใหม่ได้เพราะsanitize_user()ใช้เครื่องหมายอัฒภาค (:) @raxa
birgire

5

คุณไม่สามารถใช้พอร์ต 8080 ได้ฉันไม่รู้เลยว่าทำไมถึงเป็นพอร์ตทั่วไปสำหรับเว็บเซิร์ฟเวอร์ อย่างไรก็ตามคุณไม่สามารถ :

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         }

แจ้งให้ทราบ! in_array( $has_ports, array( ':80', ':443' ) )ล่วงหน้า พอร์ตเหล่านั้นถูกกำหนดค่าตายตัว ไม่มีตัวกรองที่คุณสามารถใช้ในการเปลี่ยนแปลงได้แม้แต่ในget_clean_basename()(และฉันกลัวที่จะเดาว่าคุณสร้างความน่ากลัวแค่ไหนหากคุณสามารถเปลี่ยนแปลงสิ่งที่ได้กลับมา)

เปลี่ยนเซิร์ฟเวอร์ของคุณเพื่อใช้พอร์ต 443 หรือพอร์ต 80 แทน


@ s_ha_dum ♦ฉันแก้ปัญหานี้โดยการปรับรหัสเพื่อรวมพอร์ตที่จำเป็น 8080 ดังนั้นดูเหมือนว่า; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { ในnetwork.php in wp-admin\includes\network.php - [Line-121]
raxa

1
แฮ็คหลักคือการปฏิบัติที่ไม่ดี เปลี่ยนเซิร์ฟเวอร์ของคุณให้ใช้ 80 หรือ 443 และส่งแพตช์ไปยัง WordPress เพื่ออนุญาตพอร์ต 8080
s_ha_dum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.