多站点网络端口号有问题吗?


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,但由于此服务器无法正常运行。我是WordPress的新手,将不胜感激。


输出是echo get_clean_basedomain();什么?支持的端口似乎是:80:443
birgire 2015年

Answers:


8

警告:这仅是针对开发人员安装而非生产站点的测试

我很想知道是否有一种解决方法,对于那些想要在开发人员安装中但不在与:80and的不同端口上开发多站点的人: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;
    } );
} );

我只是在我的开发人员安装上测试过,但是当然这可能需要更多检查;-)


1
请告诉我必须在哪里使用此代码。就我而言,我无法/wp-content/mu-plugins/wpse-ms-on-different-port.php 通过使用if ( ( false !== $has_ports && ! in_array( $has_ports, array( ':80', ':443', ':8080' ) ) ) ) {in 解决我的问题, wp-admin\includes\network.php但Hacking Core是不好的做法。
raxa

1
您可以mu-plugins在下创建目录/wp-content/。请注意,以这种方式修改核心是不够的,因为您将无法创建新站点,因为会sanitize_user()去除分号(:)。@raxa
birgire

5

您不能使用端口8080。我不知道为什么,因为这是Web服务器的相当常见的端口。但是,您不能

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.