为什么WordPress多站点重定向到wp-signup.php,以及如何修复它?

时间:2017-10-03 作者:Borislav Zlatanov

我最近在Wordpress multisite上建立了第二个博客。Multisite上的主要博客是www.example.com, 我两天前建立的第二个博客是www.example2.org.

不幸的是www.example2.org, WordPress重定向到https://www.example.com/wp-signup.php?new=

在同一台服务器上,我设置了相应的测试多站点,其中test.example.com 作为主要博客和test.example2.org 第二个博客。它正在毫无问题地工作。

多站点相关.htaccesswp-config.php 测试和实时多站点的设置都是相同的,所以这不会是问题所在。我还验证了我在live Multisite上www.example2.org 在中正确设置wp_blogs 表,并正确设置为https://www.example2.orgsiteurlhome 的行wp_2_options 表(the_2_ 与多站点上的博客ID相对应的部分)。

如果您能就为什么会发生这种重定向和/或如何解决它提出任何建议,我将不胜感激。我甚至不知道哪个文件正在发出重定向(我不认为wp-signup.php) 因此,我无法查看相关代码来进一步调试它。

3 个回复
最合适的回答,由SO网友:Borislav Zlatanov 整理而成

经过数小时的调试和绝望,问题现在解决了。结果证明这是一件非常模糊的事情。

重定向由函数发出ms_load_current_site_and_network() 在…内/wp-includes/ms-load.php. 它发出重定向是因为/wp-includes/ms-settings.php 无法设置域。它无法设置域的原因是$_SERVER[\'HTTP_HOST\'] 未设置。

$_SERVER[\'HTTP_HOST\'] 未设置与PHP设置有关auto_globals_jit. 它被设置为On,导致$_SERVER 未设置数组(如中所述this comment). 尽管$_SERVER[\'HTTP_HOST\'] 其余的是在加载单个php文件时定义的phpinfo(); 在其中,加载Wordpress的php文件时没有定义它们。这导致了重定向。

背景auto_globals_jit 在php中关闭。ini解决了这个问题。

奖金信息:

另外,由于某种形式的缓存(我无法确定或清除),问题变得更加复杂。所以我不得不依赖于我所看到的行为,这些行为只发生过一次,之后无法复制。例如,我创建了一个单独的php文件来检查$_SERVER[\'HTTP_HOST\'] 已设置,但最初未设置。按照the comment, 我用过$_SERVER[\'HTTP_HOST\'] 两次在php文件中,并立即看到它现在已设置。但是,当恢复更改并$_SERVER[\'HTTP_HOST\'] 在php文件中只有一次,它仍然保持设置状态,这表明我看到了一个缓存响应。我修了一次就再也不能让它坏了。

在这里记录一下,以防有人遇到类似的行为。

SO网友:Jesse Nickles

我不能评论,所以我留下这个答案。作为@Borislav所做的出色研究的后续,还有另一个相关的SE线程,以及几个潜在的修复:

Site Redirecting to wp-signup.php

最终,WordPress Multisite的大多数重定向问题似乎与siteurlhome 即使正确硬编码(例如使用WP_HOMEWP_SITEURL 在wp配置中。如果wp\\u options表中附带的字段不正确,php文件)仍将导致重定向问题。这是因为WordPress Multisite处理初始设置例程的方式;虽然我还没有找到任何关于这一原因的文档,但我相信这可能是一个核心开发人员故意这样做的,以确保多站点安装的功能在以后不会发生冲突,因为多站点安装比单站点安装更容易出现问题。

一些人建议实施NOBLOGREDIRECT 但这本身不起作用,也不能解决根本问题。该设置仅用于重定向在您的多站点网络中不存在的子站点上登陆的访问者(例如,如果新博客的注册被禁用)。

参考号:https://www.sarahgebauer.com/today-i-learned-multisite-mystery-signup/

参考号:https://gist.github.com/dejanmarkovic/8323792

总之:

始终确保您的wp\\U选项表具有siteurlhome 更新设置以准确反映多站点安装的主域。在某些情况下,可能需要在整个MySQL数据库中运行搜索/替换(取决于域更改和数据库损坏的历史记录),包括wp_blogswp_site 表如果您最近将多站点移动到新域。。。

更新:顺便说一句,如果您试图在不使用工具的情况下将单个站点转换为多站点网络,您也可能会遇到此重定向问题>;网络安装修补程序:

https://www.wpexplorer.com/quick-guide-wordpress-multisite-installation/

SO网友:0ad

筛选整个MySQL确实值得一试。我把我的修好了wp_domain_mappingid 是一个数字。。可能是通过添加、删除和添加别名来实现的。

仅供参考。Humanmade善意提供的域映射代码http://www.easywebdesigntutorials.com/how-to-point-a-top-level-domain-to-a-multisite-using-domain-mapping/

结束

相关推荐

redirect_to ignoring the SSL

我有一个最近添加了SSL证书的站点。在我添加证书之前,一切都很顺利。有时,当我尝试登录时,登录页面会重新加载,并且不会显示错误消息。我意识到表单有一个名为redirect\\u to的隐藏字段,该值使用http://而不是https://。如果我手动更改,我可以成功登录,所以我想这就是问题所在。解决这个问题的正确方法是什么?我想我可以在页面加载时使用一些javascript来修改它,但也许有更好的方法