无法访问wp-admin登录页面,出现header已发送报错求助
这个报错我太熟悉了,几乎都是因为HTTP头输出前有提前的内容输出导致的——WordPress在处理登录这类需要跳转、设置Cookie的操作时,要求必须先发送HTTP头,再输出任何页面内容(包括空格、换行、HTML代码),一旦有内容提前输出,就会触发这个错误。
从你给出的报错信息里,关键线索是:
output started at /homepages/6/d700752663/htdocs/clickandbuilds/OnyxMotorsCompany/wp-content/themes/cardealer/includes/base_functions.php:1
这说明问题出在这个主题文件的第一行,大概率是以下两种情况,给你一步步解决的方案:
具体解决步骤
第一步:检查文件开头的多余内容
用纯文本编辑器(比如Notepad++、VS Code,千万别用Word这类富文本编辑器)打开wp-content/themes/cardealer/includes/base_functions.php,确认第一行是不是直接以<?php开头,前面有没有多余的空格、换行或者奇怪的隐藏字符。如果有,把这些多余内容删掉,确保<?php是文件的第一个字符。第二步:排查UTF-8 BOM编码问题
很多时候UTF-8编码的文件如果带了BOM(字节顺序标记),会在文件开头隐藏输出一个标记,这个标记你看不见,但服务器会把它当作内容输出,从而触发头已发送的错误。解决方法:- 用Notepad++打开文件,点击顶部菜单「编码」→ 选择「UTF-8 无BOM」,然后保存;
- 用VS Code的话,点击右下角的编码标识,选择「通过编码保存」,再选「UTF-8」(注意不要选带BOM的选项)。
第三步:临时切换主题验证问题来源
如果上面两步都没用,你可以通过FTP或者主机控制面板,把cardealer主题文件夹重命名为cardealer_old,WordPress会自动切换到默认主题,然后尝试登录后台。如果能正常登录,就说明是这个主题的文件有问题,你可以重新下载该主题的最新版本覆盖,或者联系主题开发者反馈这个bug。第四步:(可选)排查插件问题(概率较低)
虽然你说没修改过网站,但也可以排除插件的可能性:通过FTP把wp-content/plugins文件夹重命名为plugins_old,禁用所有插件,再尝试登录。如果能登录,再逐个恢复插件排查哪一个出了问题。
补充说明
前台能正常访问是因为前台页面不需要执行登录这类需要重定向、设置Cookie的操作,提前的内容输出不会触发头已发送的报错;但后台登录流程必须依赖HTTP头来处理跳转和Cookie,所以就会暴露这个问题啦。
内容的提问来源于stack exchange,提问作者Truex

