Các vấn đề về cổng mạng Multisite?


9

Tôi đang làm theo hướng dẫn này để tạo một mạng lưới các trang web WordPress. Sau khi thêm

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

vào wp-config.phptệp của tôi và khi tôi bắt đầu định cấu hình mạng nhiều trang, tôi đã gặp lỗi này

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

Tôi cố gắng thay đổi

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

đến

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

từ httpd.confApache nhưng do máy chủ wamp này vẫn có màu cam. Làm thế nào để giải quyết vấn đề này. Tôi là người mới đối với WordPress Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.


Đầu ra của echo get_clean_basedomain();cái gì? Các cổng được hỗ trợ dường như :80:443.
bạch dương

Câu trả lời:


8

Cảnh báo: Đây chỉ là bản thử nghiệm cho cài đặt dev chứ không phải trang sản xuất

Tôi tò mò muốn xem liệu có một cách giải quyết nào không, đối với những người muốn phát triển nhiều trang trên bản cài đặt dev của họ nhưng trên các cổng khác nhau hơn :80:443, ví dụ :8080.

Tôi chỉ tìm thấy bài viết trên blog này của Henri Benoit. Ở đó, ông đưa ra các ví dụ về cách sửa đổi lõi 3.9.1, để khắc phục các hạn chế cốt lõi.

Đây là một plugin phải sử dụng/wp-content/mu-plugins/wpse-ms-on-different-port.php , nơi chúng tôi cố gắng tránh các sửa đổi cốt lõi:

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

Tôi chỉ thử nghiệm điều này trên bản cài đặt dev của tôi, nhưng điều này có thể cần kiểm tra nhiều hơn tất nhiên ;-)


1
Xin vui lòng cho tôi biết nơi mã này phải được sử dụng. Trong trường hợp của tôi, tôi không có con đường như /wp-content/mu-plugins/wpse-ms-on-different-port.php vấn đề của tôi được giải quyết bằng cách sử dụng if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {trong wp-admin\includes\network.phpnhưng Hacking Core là xấu thực hành.
raxa

1
Bạn có thể tạo mu-pluginsthư mục dưới /wp-content/. Lưu ý rằng không đủ để sửa đổi lõi theo cách đó, vì bạn sẽ không thể tạo các trang web mới vì sanitize_user()loại bỏ dấu chấm phẩy (:). @raxa
birgire

5

Bạn không thể sử dụng cổng 8080. Tôi không biết tại sao vì đó là một cổng khá phổ biến cho máy chủ web. Tuy nhiên, bạn không thể :

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         }

Thông báo ! in_array( $has_ports, array( ':80', ':443' ) ). Những cổng đó được mã hóa cứng. Không có bộ lọc nào bạn có thể sử dụng để thay đổi chúng, thậm chí không có trong get_clean_basename()(và tôi sợ phải đoán xem điều kinh khủng nào bạn tạo ra nếu bạn có thể thay đổi những gì trả lại).

Thay đổi máy chủ của bạn để sử dụng cổng 443 hoặc cổng 80 thay thế.


@ s_ha_dum ♦ Tôi giải quyết vấn đề này bằng cách điều chỉnh mã để bao gồm cổng 8080 cần thiết để có vẻ như thế này; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { trongnetwork.php in wp-admin\includes\network.php - [Line-121]
raxa

1
Hacking Core là thực hành xấu. Thay đổi máy chủ của bạn để sử dụng 80 hoặc 443 và gửi bản vá cho WordPress để cho phép cổng 8080.
s_ha_dum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.