मल्टीसाइट नेटवर्क पोर्ट नंबर्स इश्यू?


9

मैं वर्डप्रेस साइट्स का नेटवर्क बनाने के लिए इस ट्यूटोरियल का अनुसरण कर रहा हूं । जोड़ने के बाद

/* 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.confइस WAMP को अपाचे की लेकिन कारण सर्वर नारंगी बनी हुई है। इसे कैसे हल करें। मैं वर्डप्रेस के लिए एक नया हूँ किसी भी मदद की बहुत सराहना की जाएगी।


का आउटपुट क्या है echo get_clean_basedomain();? समर्थित पोर्ट लगता है :80और :443
बीरगिरे

जवाबों:


8

चेतावनी: यह सिर्फ देव संस्थापन के लिए एक परीक्षण है न कि उत्पादन साइटों के लिए

मैं यह देखने के लिए उत्सुक था कि क्या कोई वर्कअराउंड था, उन लोगों के लिए जो अपने देव इंस्टाल पर मल्टीसाइट्स विकसित करना चाहते हैं, लेकिन जैसे :80और से अलग पोर्ट पर ।:443:8080

मुझे केवल हेनरी बेनोइट का यह ब्लॉग पोस्ट मिला । वहाँ वह उदाहरण देता है कि कोर प्रतिबंधों के आसपास पाने के लिए 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;
    } );
} );

मैं सिर्फ अपने देव स्थापित पर यह परीक्षण किया है, लेकिन यह पाठ्यक्रम की अधिक जांच की आवश्यकता हो सकती है ;-)


1
Plz मुझे बताएं कि इस कोड का कहां उपयोग किया जाना है। मेरे मामले में मेरे पास कोई रास्ता नहीं है जैसे /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लेकिन हैकिंग कोर खराब अभ्यास है।
रक्सा

1
आप के mu-pluginsतहत निर्देशिका बना सकते हैं /wp-content/। ध्यान दें कि यह उस तरह से कोर को संशोधित करने के लिए पर्याप्त नहीं है, क्योंकि आप नई साइटें बनाने में सक्षम नहीं होंगे, क्योंकि sanitize_user()अर्धविराम (:) को स्ट्रिप्स करते हैं। @ क्रैक्स
बीरगेयर

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 d मैं आवश्यक पोर्ट 8080 को शामिल करने के लिए कोड को समायोजित करके इस मुद्दे को हल करता हूं, इसलिए यह इस तरह दिखता है; if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) { मेंnetwork.php in wp-admin\includes\network.php - [Line-121]
रक्सा

1
हैकिंग कोर बुरा अभ्यास है। 80 या 443 का उपयोग करने के लिए अपने सर्वर को
अलर्ट करें और
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.