标题好长……不过笔者觉得仍然有必要在文章开头描述一下错误背景。如果您看完标题,就知道笔者在说什么了,则可以直接滑到〈解决方案〉章节。
背景知识
多站点网络(Multisite network)是WordPress的一个功能,它可以让用户在一个WordPress仪表盘上创建并运行多个WordPress网站,而这些网站可以被指定不同的主域名。
虽曰如此,正所谓「天无二日,(……)1出自《礼记·曾子问》——或者是您觉得的那个出处,意思是天上没有两个太阳。下文从略。」,一个多站点网络内,只能有一个网站被指定为主站点(通常是最早存在的那个)。
而创建主域名与主站点相异的子站点后,一旦想要访问管理后台,输入账号与密码后,会被告知:
错误:您的浏览器阻止或不支持Cookie。您必须启用Cookie才能使用WordPress。
如果您的站点语言为英文,这段报错会表现为:
ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.
例如,您的主站为sanguok.com,而同网络内另一个子站为example.com
2该域名实际上是IANA持有的示例站点。,则可能在尝试登录example.com
管理后台的过程中遇到此问题。
解决方案

首先,清除浏览器缓存(包括cookie)以及缓存插件等的服务器缓存。
然后通过FTP等访问WordPress站点的根目录(即有wp-admin
、wp-content
等子目录的地方);
在wp-config.php
文件中,添加(或设置)如下:
define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');
恭喜,这下站点可以正常使用了。
对网上所流传另一方案的辨正
笔者尝试透过搜索引擎寻求解决方案时,发现网络上更多流传着另一种解决方案。
如网民bulgaru所指出的那样,在wp-config.php
文件中,添加(或设置)如下:
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'your-domain.com'); // 山月按:将your-domain.com改为您实际的主域名,例如sanguok.com
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
define('SUNRISE', 'on');
还有一种方案指出,要为wp-config.php
文件添加(或设置)如下:
// Set cookie domain for login cookies
define( 'COOKIE_DOMAIN', '.your-domain.com' ); // 山月按:将your-domain.com改为您实际的主域名,例如sanguok.com
这样修改通常或许有用,但在本文所举案例下不奏效。这是因为本文案例具有「不同主域名」这一特殊性。无论是DOMAIN_CURRENT_SITE
还是COOKIE_DOMAIN
,您都只能define
(定义)为一个值,而非多个值。
举个例子,如果您同时有sanguok.com
与example.com
两个网站,则无论将DOMAIN_CURRENT_SITE
或COOKIE_DOMAIN
指定给谁,都会导致剩下一个网站出现cookie错误。所以本章节所述方法,在「不同主域名」这一特殊条件下不奏效。
重建配置文件:消灭问题本身
常言道:「消灭问题本身,而非解决问题。」如果前述的方法不奏效,则可能是wp-config.php
有些其他错误,例如编码错误、配置错误……积重难返。

wp-config.php
可能有编码错误使用控制变量的方法逐行排查代码或许是一个解决方案。
但您若不耐烦了,索性推倒重来。将网站根目录下的wp-config-sample.php
重命名为wp-config.php
(如找不到,下载最新的WordPress安装包,并取出其中的wp-config-sample.php
文件),并手动修改里面的配置信息,上传替换。
绕过cookie请求:消灭提出问题的人
如果总是出现cookie错误,为了能够登录管理后台,您或许可以考虑以下方案——
将以下代码段添加到主题的functions.php
文件中:
setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN);
if ( SITECOOKIEPATH != COOKIEPATH ) setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN);
这样做可以忽略网站检查cookie的请求,径直登录。
但是阻止报错并不能消灭问题本身。如果cookie错误客观存在,那么对应网站依赖于cookie的功能仍旧无法实现。例如,您无法在有cookie错误的站点打开加密文章——每次输入正确的密码,点击确认,网页刷新后,仍然会停留在输入密码的界面,无限重复。因为问题仍旧存在,您只是消灭了「提出问题的人」。
一些万金油
和WordPress斗争了这么久,笔者发现了一些万金油式的排查思路。虽然并不针对本文所举案例,也未必在所有情况下都奏效,但权资参考,并陈于下。
.htaccess
问题?
如网民Marc所指出,WordPress多站点网络的很多问题出在.htaccess
3简单来说,.htaccess
文件管理用户对网站目录的访问。阅读Wiliz《.htaccess详解》了解更多。的配置上。
如果您有能力,检视并排查代码。
不然,从服务器中删除.htaccess
文件(建议删除前备份一下)。
如果问题得以自然解决,转到网站设置,并保存永久链接设置,一个新的.htaccess
文件会被自动创建。
插件问题?
通过FTP等禁用所有插件。
将网站目录下的plugins
文件夹重命名为任何字符。比如,请出你的猫仔(如有),将它重命名为njfgtews
4一串对人类来说无意义的字符,只存在于博尔赫斯笔下的巴别图书馆。,确保这串字和同目录下的其他文件夹都不同名5也就是确保这串字符对机器也没有意义。。于是,所有插件都会被禁用。
如果问题得以自然解决,将猫仔(如有)请走,把文件夹名称改回plugins
,然后一个个启用插件,确保问题不重新出现。如问题复现,恭喜您揪出了源头。
通常来说,缓存或安全性插件会导致此类问题。
HTTPS问题?
如果您安装了SSL插件,检查它有否正确重定向到HTTPS。
主题问题?
WordPress的主题也是一个意想不到的问题源头。
您可以将存放主题的文件夹重命名为任何字符,就像前面所举的请猫仔(如有)命名那样。之后,网站将恢复为默认的WordPress主题,例如「2022」,而与主题相关的问题便会不见。
若然,则删除网站出问题的时候所用的主题。
结语
通过上述介绍,您应该了解到了WordPress多站点网络分布于不同主域名时,登录管理后台出现cookie错误的解决方案吧。如果您仍有疑问,或有意见想要指导,欢迎于评论区留言。您也可以移步浏览更多笔者所总结的WordPress小攻略,订阅WordPress相关文章的RSS。
尾註
- 1出自《礼记·曾子问》——或者是您觉得的那个出处,意思是天上没有两个太阳。下文从略。
- 2该域名实际上是IANA持有的示例站点。
- 3简单来说,
.htaccess
文件管理用户对网站目录的访问。阅读Wiliz《.htaccess详解》了解更多。 - 4一串对人类来说无意义的字符,只存在于博尔赫斯笔下的巴别图书馆。
- 5也就是确保这串字符对机器也没有意义。
在〈WordPress多站点网络分布于不同主域名时登录管理后台出现cookie错误的解决方案〉中有 3 則留言
我想问下,我直接建多个网站岂不是更好?用一个dashboard的优势和好处是什么?
账户和密码可以共用,亦即a站点的账号可以登录到b站点。
如果你有用buddypress,会发现也能够一定程度的互通。
用一个dashboard便于在sidebar切换、管理,在统一位置管诸站点的主题、插件。
还有就是像Wordpress软件本身以及插件、主题文件,可以被同一个多站点网络下的诸站点调用,节省服务器空间。不然如果一个站点一个站点这样建立的话,重复的软件本体和主题、插件文件会占用很多空间。
多站点网络当然有坏处,就是一个站点出现了问题的话,很大概率所有站点都出问题了。因为他们都共用同一个wp内核,即软件本体、插件、主题文件等等。这事儿就好像你在房间里发现了一只蟑螂,很大概率其他房间也已经有蟑螂了。
但不尽然。也有只有某一个站有问题,别的站不出问题的情况。这就好像在阳台发现了蟑螂,但屋子里未必有。
写了 #WordPress 多站点网络(Multisite network)的两则小功略:为WordPress多站点设置不同的子目录、子域名,甚至主域名 https://sanguok.com/blog/how-to-set-up-different-subdirectories-subdomains-or-even-main-domains-for-wordpress-multisite-network/WordPress多站点网络分布于不同主域名时登录管理后台出现cookie错误的解决方案 https://sanguok.com/blog/solution-for-cookie-error-when-logging-into-admin-backend-when-network-sites-have-their-own-main-domain-name/