WordPress插件PHP重定向异常:一站正常一站返回原页面带HTML
WordPress重定向问题修复方案
你的代码存在几个明显问题,导致跨站点表现不一致:
- 重复发送重定向头:
wp_redirect()本身已经负责处理Location头的发送,额外手动调用header()属于重复操作,可能触发头信息已发送的错误。 - 判断逻辑错误:
wp_redirect()的返回值仅表示是否成功设置头信息,不能作为执行后续代码的判断依据。 - 脚本未及时终止:即使
wp_redirect()执行成功,若不立即终止脚本,后续页面内容输出会直接破坏重定向流程。 - URL构建不安全:直接依赖
$_SERVER['HTTP_HOST']可能被恶意请求头篡改,应该用WordPress内置函数生成可靠的站点URL。
修正后的代码
// 用WordPress内置函数构建安全的重定向URL $url = home_url('/confirmation-success-rdv'); // 执行重定向并立即终止脚本 wp_redirect($url); exit;
为什么两个站点表现不同?
大概率是其中一个站点开启了输出缓冲(Output Buffering),掩盖了"头信息已发送"的警告,让错误代码侥幸生效;而另一个站点没有开启缓冲,当重定向前已经有页面内容(哪怕是一个空格、PHP文件的BOM头)输出时,wp_redirect()无法发送头信息,导致重定向失败,页面只能输出原内容加上部分HTML。
排查建议
- 在
wp-config.php中开启调试模式(设置define('WP_DEBUG', true);),查看是否有"Headers already sent"的错误提示,定位提前输出内容的位置。 - 检查插件代码、主题模板中,重定向前是否有echo语句、HTML标签,甚至PHP文件开头/结尾的多余空格。
内容的提问来源于stack exchange,提问作者Faranix
相关产品推荐
相关产品推荐

