问题描述
我正在关注 This tutorial 创建一个 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
从 Apache 的 httpd.conf
,但由于这个 wamp 服务器仍然是橙色。如何解决这个问题我是 WordPress 的新手任何帮助将非常感谢。
最佳解决方案
警告:这只是开发人员安装而不是生产站点的测试
我很好奇,看看是否有解决方法,对于那些想要在开发人员安装而不是:80
和:443
的不同端口开发多功能的用户。 :8080
。
我只发现了 Henri Benoit 的这个 blog post 。在那里他给出了如何修改 3.9.1 核心的例子,以摆脱核心的限制。
这是一个 must-use 插件/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;
} );
} );
我刚刚在我的开发工具上进行了测试,但这可能需要更多的检查;-)
次佳解决方案
您不能使用端口 8080. 我不知道为什么这是一个相当常见的 Web 服务器端口。但是,you can’t:
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' ) )
。那些端口是 hard-coded 。没有可以用来改变它们的过滤器,甚至不能在 get_clean_basename()
中使用 (如果你能改变返回的结果,我恐怕会猜到你会创造什么恐怖) 。
更改您的服务器以使用端口 443 或端口 80 。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。