PHP重定向时无法输出两个$_GET参数?技术求助
修复带分页参数时帖子ID丢失的重定向代码
问题原因
你的代码生成t--p-2.html这类无效URL,核心问题是未提前校验threadid参数的存在性与有效性,直接赋值拼接URL。当threadid参数缺失(或拼写错误)时变量为空,叠加分页参数就会出现空占位符;同时直接使用原始GET参数,存在安全风险。
修复方案
以下是兼顾正确性、安全性与规范的优化代码:
<?php // 先校验核心参数threadid,不存在直接跳首页 if (empty($_GET['threadid'])) { header("Location: index.html"); exit; } // 将threadid转为整数,避免恶意注入,确保是有效数字 $threadId = (int)$_GET['threadid']; $redirectUrl = "t-{$threadId}.html"; // 校验分页参数:存在、是数字且大于1时才拼接分页部分 if (isset($_GET['page']) && is_numeric($_GET['page']) && (int)$_GET['page'] > 1) { $page = (int)$_GET['page']; $redirectUrl = "t-{$threadId}-p-{$page}.html"; } // 优先使用标准HTTP重定向头(效率更高、更符合规范) header("Location: {$redirectUrl}"); exit; ?> <!-- 浏览器不支持HTTP头重定向时的降级方案 --> <html> <head> <meta http-equiv="refresh" content="3;url=<?php echo $redirectUrl; ?>"> </head> <body> 正在重定向至帖子ID <?php echo $threadId; ?>(如果档案中存在) </body> </html>
关键修复点
- 核心参数校验:强制检查
threadid是否存在,缺失则直接跳首页,从根源避免无效URL - 类型安全处理:将
threadid和page转为整数,防止恶意字符串注入,确保参数合法 - 分页逻辑优化:仅当分页参数是有效数字且大于1时才拼接,避免生成
t-1-p-1.html这类冗余URL - 规范重定向方式:优先使用
LocationHTTP头重定向,比meta刷新更高效,同时保留meta作为降级方案 - 语义化变量名:用
$threadId替代$threadlink,提升代码可读性
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

