如何获取URL后追加的任意字符并实现指定场景下的PHP重定向功能
PHP重定向逻辑修复方案
原有代码问题
- 硬编码了固定URL,没有获取用户实际访问的请求地址,无法判断当前访问的路径是否有追加内容
- 判断逻辑不符合需求:现有规则只要URL包含
/且不包含/a就触发跳转,完全匹配不了「脚本路径后无额外内容才跳转」的要求
修复后代码
<?php $target_url = 'https://stefan-momcilovic.com'; // 提取请求的完整URI $request_uri = $_SERVER['REQUEST_URI']; // 裁剪掉查询参数,仅保留路径部分 $request_path = strtok($request_uri, '?'); // 获取当前脚本自身的访问路径 $script_path = $_SERVER['SCRIPT_NAME']; // 路径归一化处理后对比,相等则说明脚本后无额外路径 if (trim($request_path, '/') === trim($script_path, '/')) { // 301为永久重定向,302为临时重定向,可按需调整 header('Location: ' . $target_url, true, 302); // 重定向后必须终止后续代码执行 exit; } ?>
逻辑说明
- 直接对比请求路径和脚本路径,无需依赖PATH_INFO配置,兼容性更强
- 提前裁剪掉查询参数部分,避免
?id=1这类查询字符串干扰判断 - 对路径做了首尾斜杠的归一化处理,避免不同服务器的路径格式差异导致判断失效
- 重定向后新增exit终止逻辑,避免后续代码意外执行
内容的提问来源于stack exchange,提问作者Stefan Momcilovic
相关产品推荐
相关产品推荐

