WordPress中PHP检查URL与Cookie后异常跳转问题排查
问题根源分析
你的代码出现"无论Cookie是否设置都跳转"的问题,核心原因有两个:
- Cookie判断逻辑错误:内层条件同时要求
thenameCookie存在,且_r_ckCookie值为thevalue。如果thename未设置,哪怕_r_ck符合要求,也会触发跳转;另外直接读取$_COOKIE["_r_ck"]未做存在性检查,若该Cookie不存在会直接导致条件不成立。 - 端口号使用全角字符:
$_SERVER["SERVER_PORT"] != "۸۰"中的"۸۰"是全角数字,而服务器返回的端口号是半角"80",会导致URL拼接逻辑异常,可能影响后续的URL匹配(根据你描述的跳转情况,应该已进入URL匹配的外层判断,但该问题仍需修正)。
修正后的代码
function get_current_url() { $pageURL = 'http'; if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; // 修正为半角数字80 if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } $url = get_current_url(); $no_c_redirect = 'https://example.com/content/file.html'; if (strpos($url, '/secured-registration/') !== false) { // 仅验证_r_ck Cookie存在且值正确(若需同时验证thename,添加isset($_COOKIE["thename"]) && 即可) if (isset($_COOKIE["_r_ck"]) && $_COOKIE["_r_ck"] === "thevalue") { // Cookie符合要求时的逻辑(留空或添加业务代码) } else { header('Location: '.$no_c_redirect); // 跳转后必须终止脚本,避免后续代码运行 exit; } }
额外优化建议
- 跳转后加
exit;:使用header('Location: ...')后必须终止脚本执行,防止后续代码运行引发意外问题。 - 用WordPress内置函数:可以用
home_url(add_query_arg(array(), $wp->request))替代自定义的get_current_url,减少自定义代码的潜在问题。 - 确认Cookie参数:检查前端设置的Cookie名称、值是否与代码一致,同时确认Cookie的域名、路径作用域是否覆盖当前页面,避免Cookie无法被读取。
内容的提问来源于stack exchange,提问作者Tristan Galvin
相关产品推荐
相关产品推荐

